system_file_upload_logic.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package system
  2. import (
  3. "context"
  4. "fmt"
  5. "io"
  6. "net/http"
  7. "os"
  8. "path/filepath"
  9. "git.i2edu.net/i2/i2-bill-api/internal/svc"
  10. "git.i2edu.net/i2/i2-bill-api/internal/types"
  11. "git.i2edu.net/i2/go-zero/core/logx"
  12. )
  13. type SystemFileUploadLogic struct {
  14. logx.Logger
  15. ctx context.Context
  16. svcCtx *svc.ServiceContext
  17. }
  18. func NewSystemFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext) SystemFileUploadLogic {
  19. return SystemFileUploadLogic{
  20. Logger: logx.WithContext(ctx),
  21. ctx: ctx,
  22. svcCtx: svcCtx,
  23. }
  24. }
  25. func (l *SystemFileUploadLogic) SystemFileUpload(r *http.Request) (*types.Response, error) {
  26. // todo: add your logic here and delete this line
  27. userId := l.svcCtx.GetUserIdByJwt(l.ctx)
  28. file, fileHeader, err := r.FormFile("file")
  29. if err != nil {
  30. logx.Error(err.Error())
  31. return &types.Response{500, err.Error(), nil}, nil
  32. }
  33. dir := "asserts/avatar"
  34. _, err = os.Stat(dir)
  35. if err != nil && !os.IsExist(err) {
  36. err := os.MkdirAll(dir, os.ModePerm)
  37. if err != nil {
  38. logx.Error(err.Error())
  39. return &types.Response{500, err.Error(), nil}, nil
  40. }
  41. }
  42. fileName := fmt.Sprintf("%s/%d%s", dir, userId, filepath.Ext(fileHeader.Filename))
  43. newFile, err := os.OpenFile(fileName, os.O_TRUNC|os.O_CREATE|os.O_RDWR, 0777)
  44. if err != nil {
  45. logx.Error(err.Error())
  46. return &types.Response{500, err.Error(), nil}, nil
  47. }
  48. _, err = io.Copy(newFile, file)
  49. if err != nil {
  50. logx.Error(err.Error())
  51. return &types.Response{500, err.Error(), nil}, nil
  52. }
  53. return &types.Response{200, "", fileName}, nil
  54. }