要处理文件上传,你可以使用multipart/form-data编码的表单。在HTML表单中,你需要设置enctype="multipart/form-data"。然后,在Gin中,你可以使用FormFile或SaveUploadedFile方法来处理上传的文件。
单文件上传
<form method="post" action="/api/file" enctype="multipart/form-data">
<div class="input-file-box">
<span>点击上传图片</span>
<input type="file" name="mfile" id="uploadfile" multiple> //name属性提供给后端接口
</div>
<button type="submit" id="ensure">确认上传</button>
</form>
func (u UserController) FileUp(c *gin.Context) {
file, err := c.FormFile("mfile")
if err != nil {
c.JSON(http.StatusBadRequest, SetOut(400, nil, err.Error()))
return
}
extName := path.Ext(file.Filename)
// 上传文件到指定的目录
now := time.Now()
dir := "./static/upload/" + now.Format("2006-01-02")
fileUnixName := strconv.FormatInt(now.UnixNano(), 10)
dst := path.Join(dir, fileUnixName+extName)
c.SaveUploadedFile(file, dst)
c.JSON(http.StatusOK, SetOut(200, dst))
}
多文件上传--不同名字的多个文件
<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>
//只需要多添加一个就行了
file, err2 := ctx.FormFile("myGoodsImg2")
if err2 != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{ "message": err.Error(), })
多文件上传--相同同名字的多个文件
<input type="file" name="myGoodsImg[]" id="uploadfile" multiple>
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": "文件上传成功",
})
}
按照日期存储
//判断文件格式
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)
}