本文已参与「新人创作礼」活动,一起开启掘金创作之路。
gin 文件上传
注意:需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data"
## 一、单文件上传 ### 1、定义模板 例如: ```html
``` 注意:在真实的项目中,我们需要定义模板!!!{{define 模板名}} html {{end}} ### 2、定义业务逻辑
```go 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、定义模板
```html
```
2、定义业务逻辑
go //只需要多添加一个就行了 file, err2 := ctx.FormFile("myGoodsImg2") if err2 != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "message": err.Error(), })
注意:但是我们一般上传文件都是一个按钮然后选择多文件一键提交上传,因此,我们应该学会多文件上传--相同名字的多个文件
三、多文件上传--相同同名字的多个文件
### 1、定义模板 在单文件上传的模板上的input改成下面这行代码: html <input type="file" name="myGoodsImg[]" id="uploadfile" multiple>
### 2、定义业务逻辑
go 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、定义业务逻辑(与相同同名字的多个文件类似) 下面只写不一样的和增加的 ```go //判断文件格式
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) } ```