package public import ( "encoding/base64" "errors" "fmt" "io/ioutil" "strings" "github.com/gin-gonic/gin" "github.com/google/uuid" imgType "github.com/shamsher31/goimgtype" "go-admin/pkg/utils" "go-admin/tools" "go-admin/tools/app" ) type FileResponse struct { Size int64 `json:"size"` Path string `json:"path"` FullPath string `json:"full_path"` Name string `json:"name"` Type string `json:"type"` } // @Summary 上传图片 // @Description 获取JSON // @Tags system/公共接口 // @Accept multipart/form-data // @Param type query string true "type" (1:单图,2:多图, 3:base64图片) // @Param file formData file true "file" // @Success 200 {string} string "{"code": 200, "message": "添加成功"}" // @Success 200 {string} string "{"code": -1, "message": "添加失败"}" // @Router /api/v1/public/uploadFile [post] func UploadFile(c *gin.Context) { tag, _ := c.GetPostForm("type") urlPerfix := fmt.Sprintf("http://%s/", c.Request.Host) var fileResponse FileResponse if tag == "" { app.Error(c, 200, errors.New(""), "缺少标识") return } else { switch tag { case "1": // 单图 files, err := c.FormFile("file") if err != nil { app.Error(c, 200, errors.New(""), "图片不能为空") return } // 上传文件至指定目录 guid := uuid.New().String() singleFile := "static/uploadfile/" + guid + utils.GetExt(files.Filename) _ = c.SaveUploadedFile(files, singleFile) fileType, _ := imgType.Get(singleFile) fileResponse = FileResponse{ Size: tools.GetFileSize(singleFile), Path: singleFile, FullPath: urlPerfix + singleFile, Name: files.Filename, Type: fileType, } app.OK(c, fileResponse, "上传成功") return case "2": // 多图 files := c.Request.MultipartForm.File["file"] var multipartFile []FileResponse for _, f := range files { guid := uuid.New().String() multipartFileName := "static/uploadfile/" + guid + utils.GetExt(f.Filename) e := c.SaveUploadedFile(f, multipartFileName) fileType, _ := imgType.Get(multipartFileName) if e == nil { multipartFile = append(multipartFile, FileResponse{ Size: tools.GetFileSize(multipartFileName), Path: multipartFileName, FullPath: urlPerfix + multipartFileName, Name: f.Filename, Type: fileType, }) } } app.OK(c, multipartFile, "上传成功") return case "3": // base64 files, _ := c.GetPostForm("file") file2list := strings.Split(files, ",") ddd, _ := base64.StdEncoding.DecodeString(file2list[1]) guid := uuid.New().String() base64File := "static/uploadfile/" + guid + ".jpg" _ = ioutil.WriteFile(base64File, ddd, 0666) typeStr := strings.Replace(strings.Replace(file2list[0], "data:", "", -1), ";base64", "", -1) fileResponse = FileResponse{ Size: tools.GetFileSize(base64File), Path: base64File, FullPath: urlPerfix + base64File, Name: "", Type: typeStr, } app.OK(c, fileResponse, "上传成功") } } }