Golang单文件上传POST方式接收封装版
// 上传文件
func GetUpload(w http.ResponseWriter, r *http.Request) {
type Return struct {
Msg string `json:"msg"` //提示内容
Code int `json:"code"` //正确值=0 错误值400/500
Info interface{} `json:"info"`
}
var Ret Return
HTTPS := "http://www.baidu.com" //默认域名
//================================================以下固定
blok := r.PostFormValue("blok") // form-json 方式
if blok == "" {
blok = "upload"
}
year := strconv.Itoa(time.Now().Year())
Month := strconv.Itoa(int(time.Now().Month()))
uinx := strconv.FormatInt(time.Now().UnixMicro(), 10)
r.ParseMultipartForm(8 << 20) //设置内存大小
file, handler, err := r.FormFile("file") //获取上传文件
if err != nil {
fmt.Println("获取上传文件异常", err)
Ret.Msg = err.Error()
Ret.Code = 500
msg, _ := json.Marshal(Ret)
w.Write(msg)
return
}
defer file.Close()
os.MkdirAll("./file/"+blok+"/"+year+"/"+Month+"/", os.ModePerm) //创建上传目录
suffix := path.Ext(handler.Filename) //获取文件后缀
f, err := os.Create("./file/" + blok + "/" + year + "/" + Month + "/" + uinx + suffix) //创建上传文件
if err != nil {
fmt.Println("创建上传文件异常", err)
Ret.Msg = err.Error()
Ret.Code = 400
msg, _ := json.Marshal(Ret)
w.Write(msg)
return
}
defer f.Close()
if f.Name() != "" {
io.Copy(f, file)
}
url := strings.Replace(f.Name(), "./file/", "/file/", -1)
Ret.Msg = "上传成功"
Ret.Info = HTTPS + url
msg, _ := json.Marshal(Ret)
w.Write(msg)
}
