system_file_upload_logic.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package system
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "git.i2edu.net/i2/i2-bill-api/internal/global"
  7. "git.i2edu.net/i2/i2-bill-api/internal/svc"
  8. "git.i2edu.net/i2/i2-bill-api/internal/types"
  9. "io"
  10. "net/http"
  11. "os"
  12. "path/filepath"
  13. "strings"
  14. "git.i2edu.net/i2/go-zero/core/logx"
  15. )
  16. type SystemFileUploadLogic struct {
  17. logx.Logger
  18. ctx context.Context
  19. svcCtx *svc.ServiceContext
  20. }
  21. func NewSystemFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext) SystemFileUploadLogic {
  22. return SystemFileUploadLogic{
  23. Logger: logx.WithContext(ctx),
  24. ctx: ctx,
  25. svcCtx: svcCtx,
  26. }
  27. }
  28. func (l *SystemFileUploadLogic) SystemFileUpload(r *http.Request) (*types.Response, error) {
  29. // todo: add your logic here and delete this line
  30. file, fileHeader, err := r.FormFile("file")
  31. if err != nil {
  32. logx.Error(err.Error())
  33. return &types.Response{500, err.Error(), nil}, nil
  34. }
  35. res, err := global.NewAliYunOssUpDownloader().Upload(file, fileHeader)
  36. if err != nil {
  37. logx.Error(err.Error())
  38. return &types.Response{500, err.Error(), nil}, nil
  39. }
  40. resp := make(map[string]interface{})
  41. resByte, err := json.Marshal(res)
  42. if err != nil {
  43. logx.Error(err.Error())
  44. return &types.Response{500, err.Error(), nil}, nil
  45. }
  46. if err := json.Unmarshal(resByte, &resp); err != nil {
  47. logx.Error(err.Error())
  48. return &types.Response{500, err.Error(), nil}, nil
  49. }
  50. resp["full_url"] = strings.TrimLeft(l.svcCtx.Config.AliYunOss.FileUrl, ",") + "/" + strings.TrimRight(res.Url, "/")
  51. return &types.Response{200, "", resp}, nil
  52. }
  53. func localFileUpload(l SystemFileUploadLogic, r *http.Request) (*types.Response, error) {
  54. userId := l.svcCtx.GetUserIdByJwt(l.ctx)
  55. file, fileHeader, err := r.FormFile("file")
  56. if err != nil {
  57. logx.Error(err.Error())
  58. return &types.Response{500, err.Error(), nil}, nil
  59. }
  60. dir := "asserts/avatar"
  61. _, err = os.Stat(dir)
  62. if err != nil && !os.IsExist(err) {
  63. err := os.MkdirAll(dir, os.ModePerm)
  64. if err != nil {
  65. logx.Error(err.Error())
  66. return &types.Response{500, err.Error(), nil}, nil
  67. }
  68. }
  69. fileName := fmt.Sprintf("%s/%d%s", dir, userId, filepath.Ext(fileHeader.Filename))
  70. newFile, err := os.OpenFile(fileName, os.O_TRUNC|os.O_CREATE|os.O_RDWR, 0777)
  71. if err != nil {
  72. logx.Error(err.Error())
  73. return &types.Response{500, err.Error(), nil}, nil
  74. }
  75. _, err = io.Copy(newFile, file)
  76. if err != nil {
  77. logx.Error(err.Error())
  78. return &types.Response{500, err.Error(), nil}, nil
  79. }
  80. return &types.Response{200, "", fileName}, nil
  81. }