Golang单文件上传POST方式接收封装版

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)
}

463 Views
分享你的喜爱
linwute
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注