Gin 的文件上传

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

gin 文件上传

注意:需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data" ## 一、单文件上传 ### 1、定义模板 例如: ```html

点击上传图片 //name属性提供给后端接口
确认上传

``` 注意:在真实的项目中,我们需要定义模板!!!{{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

点击上传图片 //name属性提供给后端接口
确认上传

```

2、定义业务逻辑

go //只需要多添加一个就行了 file, err2 := ctx.FormFile("myGoodsImg2") if err2 != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "message": err.Error(), }) 注意:但是我们一般上传文件都是一个按钮然后选择多文件一键提交上传,因此,我们应该学会多文件上传--相同名字的多个文件

三、多文件上传--相同同名字的多个文件

### 1、定义模板 在单文件上传的模板上的input改成下面这行代码: html

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

你可能感兴趣的:(golang,开发语言,后端)