本文已参与「新人创作礼」活动,一起开启掘金创作之路。
gin 文件上传
注意:需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data"
一、单文件上传
1、定义模板
例如:
<form method="post" action="/" enctype="multipart/form-data">
<div class="input-file-box">
<span>点击上传图片</span>
<input type="file" name="myGoodsImg" id="uploadfile" multiple> //name属性提供给后端接口
</div>
<button type="submit" id="ensure">确认上传</button>
</form>
注意:在真实的项目中,我们需要定义模板!!!{{define 模板名}} html {{end}}
2、定义业务逻辑
func (c UserController) FileUp(ctx *gin.Context) {
file, err := ctx.FormFile("myGoodsImg")
if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{ "message": err.Error(), })
return
}
// 上传文件到指定的目录
dst := path.Join("./static/upload", file.Filename)
fmt.Println(dst)
ctx.SaveUploadedFile(file, dst)
ctx.JSON(http.StatusOK, gin.H{ "message": fmt.Sprintf("'%s' fileUpSucc!", file.Filename), })
}
二、多文件上传--不同名字的多个文件
1、定义模板
<form method="post" action="/" enctype="multipart/form-data">
<div class="input-file-box">
<span>点击上传图片</span>
<input type="file" name="myGoodsImg1" id="uploadfile" multiple> //name属性提供给后端接口
<input type="file" name="myGoodsImg2" id="uploadfile" multiple>
</div>
<button type="submit" id="ensure">确认上传</button>
</form>
2、定义业务逻辑
//只需要多添加一个就行了
file, err2 := ctx.FormFile("myGoodsImg2")
if err2 != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{ "message": err.Error(), })
注意:但是我们一般上传文件都是一个按钮然后选择多文件一键提交上传,因此,我们应该学会多文件上传--相同名字的多个文件
三、多文件上传--相同同名字的多个文件
1、定义模板
在单文件上传的模板上的input改成下面这行代码:
<input type="file" name="myGoodsImg[]" id="uploadfile" multiple>
2、定义业务逻辑
func (c UserController) MuchAddFile(ctx *gin.Context) {
// Multipart form
form, _ := ctx.MultipartForm()
files := form.File["myGoodsImg[]"]
// var dst;
for _, file := range files { //使用for循环将files循环出来
// 上传文件至指定目录
dst := path.Join("./static/upload", file.Filename)
ctx.SaveUploadedFile(file, dst)
}
ctx.JSON(http.StatusOK, gin.H{ "message": "文件上传成功",
})
}
注意:在一个项目中,上传的文件非常多,并且需要判断文件是否是我们需要的格式。所以我们需要根据时间来分类。
四、文件上传 按照日期存储
1、定义模板
多文件上传--相同同名字的多个文件的模板一样
2、定义业务逻辑(与相同同名字的多个文件类似)
下面只写不一样的和增加的
//判断文件格式
if err1 == nil {
//2、获取后缀名 判断类型是否正确 .jpg .png .gif .jpeg
extName := path.Ext(file.Filename)
allowExtMap := map[string]bool{
".jpg": true,
".png": true,
".gif": true,
".jpeg": true, }
//做出提示
if _, ok := allowExtMap[extName]; !ok {
ctx.String(200, "文件类型不合法")
return
}
//3、创建图片保存目录
day := models.GetDay() //使用公共模板方法
dir := "./static/upload/" + day //使用时间做路径
if err := os.MkdirAll(dir, 0666); err != nil {
log.Error(err)
}
//4、生成文件名称
fileUnixName := strconv.FormatInt(models.GetUnix(), 10)
//5、保存文件到该路径
saveDir := path.Join(dir, fileUnixName+extName)
ctx.SaveUploadedFile(file, saveDir)
}