Слияние кода завершено, страница обновится автоматически
package helper
import (
"github.com/gorilla/mux"
"net/http"
"os"
"io"
"log"
)
//上传 post
func UploadHandler(w http.ResponseWriter, r *http.Request) {
//随机生成一个不存在的fileid
var imgid string
for{
imgid=MakeImageID()
//不是重复的id 不存在
if !FileExist(ImageID2Path(imgid)){
break
}
}
//上传参数为uploadfile
r.ParseMultipartForm(32 << 20)
file, _, err := r.FormFile("uploadfile")
if err != nil {
log.Println(err)
w.Write([]byte("Error:上传错误》获取文件"))
return
}
defer file.Close()
//检测文件类型
buff := make([]byte, 512)
_, err = file.Read(buff)
if err != nil {
log.Println(err)
w.Write([]byte("Error:上传错误》读取文件"))
return
}
filetype := http.DetectContentType(buff)
if filetype!="image/jpeg"{
w.Write([]byte("Error:上传错误》不是JPEG"))
return
}
//回绕文件指针
if _, err = file.Seek(0, 0); err!=nil{
log.Println(err)
}
//提前创建整棵存储树(如果不进行存储树结构创建,下面的文件创建不会成功)。
if err=BuildTree(imgid); err!=nil{
log.Println(err)
}
//将文件写入ImageID指定的位置
f, err := os.OpenFile(ImageID2Path(imgid), os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
log.Println(err)
w.Write([]byte("Error:上传错误》保存错误"))
return
}
defer f.Close()
io.Copy(f, file)
w.Write([]byte(imgid))
}
//下载 get
func DownloadHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
imageid := vars["imgid"]
if len([]rune(imageid)) != 16 {
w.Write([]byte("Error:下载错误》图片ID不正确"))
return
}
imgpath := ImageID2Path(imageid)
///fmt.Println(imgpath)
if !FileExist(imgpath) {
w.Write([]byte("Error:下载错误》图片不存在"))
return
}
http.ServeFile(w, r, imgpath)
}
//首页输出
func HomeHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("<html><body><center><h1>It Works!</h1></center><hr><center>Six Image Server</center></body></html>"))
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )