func (this UploadService) Upload(c *gin.Context) { form, err := c.MultipartForm() if err != nil { data := struct { Code int32 `json:"code"` Msg string `json:"message"` Paths []string `json:"paths"` }{Code: http.StatusBadRequest, Msg: "表单主体缺失", Paths: []string{}} c.JSON(http.StatusOK, data) return } if form.File == nil { data := struct { Code int32 `json:"code"` Msg string `json:"message"` Paths []string `json:"paths"` }{Code: http.StatusBadRequest, Msg: "表单未传文件", Paths: []string{}} c.JSON(http.StatusOK, data) return } files := form.File["data"] paths := make([]string, 0) for _, file := range files { log.Println(file.Filename) // 保存文件 fileHandle, err := file.Open() defer fileHandle.Close() if err != nil { continue } // file中没有单独列出扩展名,所以此处需要单独取一次 fileExt := path.Ext(file.Filename) // 此处重命名文件名 取此时的时间千分秒作为文件名 filename := time.Now().UnixMilli() // 以年月为文件目录进行分类 tTime := time.Now().Format("20060101") // 年月/文件名.扩展名(注意不要再定义的目录前面加/) ossFilePath := fmt.Sprintf("%s/%v%s", tTime, filename, fileExt) fileOssPath, err := this.OSS.Upload(fileHandle, ossFilePath) paths = append(paths, fileOssPath) } fmt.Println("文件地址", paths) data := struct { Code int32 `json:"code"` Msg string `json:"message"` Paths []string `json:"paths"` }{Code: 0, Msg: "成功", Paths: paths} c.JSON(http.StatusOK, data) }