upload.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package upload
  2. import (
  3. "fmt"
  4. "net/http"
  5. "os"
  6. "time"
  7. "gitee.com/xuyiping_admin/pkg/apierr"
  8. "gitee.com/xuyiping_admin/pkg/xerr"
  9. "github.com/gin-gonic/gin"
  10. )
  11. func Photos(c *gin.Context) {
  12. form, err := c.MultipartForm()
  13. if err != nil {
  14. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Customf("No multipartForm: %s", err.Error()))
  15. return
  16. }
  17. files := form.File["uploads"]
  18. // 验证文件数量
  19. if len(files) == 0 {
  20. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Custom("No files selected"))
  21. return
  22. }
  23. saveDir := "./files/photos"
  24. if _, err = os.Stat(saveDir); os.IsNotExist(err) {
  25. if err = os.MkdirAll(saveDir, 0755); err != nil {
  26. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Customf("创建目录失败: %s", err.Error()))
  27. return
  28. }
  29. }
  30. // 处理每个文件
  31. filePaths := make([]string, len(files))
  32. timestamp := time.Now().Unix()
  33. for i, file := range files {
  34. if file.Header.Get("Content-Type") != "image/jpeg" &&
  35. file.Header.Get("Content-Type") != "image/png" &&
  36. file.Header.Get("Content-Type") != "image/gif" {
  37. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Customf("图片格式错误: %s", file.Filename))
  38. return
  39. }
  40. if file.Size > 1024*1024*5 {
  41. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Custom("单个图片文件不能超过5MB"))
  42. return
  43. }
  44. fpath := fmt.Sprintf("%s/%d_%d_%s", saveDir, timestamp, i+1, file.Filename)
  45. if err = c.SaveUploadedFile(file, fpath); err != nil {
  46. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Customf("保存文件失败: %s", err.Error()))
  47. return
  48. }
  49. filePaths[i] = fpath
  50. }
  51. c.JSON(http.StatusOK, gin.H{"code": http.StatusOK, "message": "ok", "data": filePaths})
  52. }
  53. func Files(c *gin.Context) {
  54. }