单文件上传
func (con UserController) Upload(r *gin.Context) {
//获取用户给名
username := r.PostForm("username")
//接收文件
avatar, err := r.FormFile("avatar")
//保存路径
filepath := path.Join("./static/upload", avatar.Filename)
if err == nil {
//获取文件名称
//filename := avatar.Filename
err01 := r.SaveUploadedFile(avatar, filepath)
if err01 != nil {
fmt.Println("err=", err01)
return
}
}
r.JSON(http.StatusOK, gin.H{
"success": true,
"username": username,
"filepath": filepath,
})
}
多文件上传
(一)不同名字的文件上传和单文件上传同理
(二)同文件名的文件上传 前端输入框名字必须都为upload[]
func main() {
router := gin.Default()
// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)
// router.MaxMultipartMemory = 8 << 20 // 8 MiB
router.POST("/upload", func(c *gin.Context) {
// Multipart form
form, _ := c.MultipartForm()
files := form.File["upload[]"]
for _, file := range files {
log.Println(file.Filename)
// 上传文件至指定目录
// c.SaveUploadedFile(file, dst)
}
c.String(http.StatusOK, fmt.Sprintf("%d files uploaded!", len(files)))
})
router.Run(":8080")
}
举个例子——按照日期存储图片
/*
*
上传图片
*/
func (con UserController) Upload(r *gin.Context) {
//获取用户给名
username := r.PostForm("username")
//接收文件
avatar, err := r.FormFile("avatar")
if err == nil {
//文件后缀名
extName := path.Ext(avatar.Filename)
//设置允许上传的图片格式
allowExtMap := map[string]bool{
".jpg": true,
".png": true,
".jpeg": true,
".gif": true,
}
//判断格式是否正确
if _, ok := allowExtMap[extName]; !ok {
r.String(200, "图片格式不正确!")
return
}
//保存路径
//获取今天时间
day := models.GetDay()
dir := "./static/upload/" + day
mkdirerr := os.MkdirAll(dir, 0666)
if mkdirerr != nil {
fmt.Println(mkdirerr)
r.String(200, "目录创建失败!")
return
}
//生成文件名
fileName := strconv.FormatInt(models.GetUnix(), 10) + extName
//保存文件
dst := path.Join(dir, fileName)
err01 := r.SaveUploadedFile(avatar, dst)
if err01 != nil {
fmt.Println("err=", err01)
r.String(200, "保存文件出错")
return
}
}
//返回信息
r.JSON(http.StatusOK, gin.H{
"success": true,
"username": username,
})
}