upload_agent_data_handler.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package agent
  2. import (
  3. "errors"
  4. "net/http"
  5. "strconv"
  6. "wechat-api/internal/types"
  7. "github.com/zeromicro/go-zero/rest/httpx"
  8. "wechat-api/internal/logic/agent"
  9. "wechat-api/internal/svc"
  10. )
  11. const (
  12. defaultMultipartMemory = 32 << 20 // 32 MB
  13. )
  14. // swagger:route post /agent/data/upload agent UploadAgentData
  15. //
  16. // upload agent data | 上传data
  17. //
  18. // upload agent data | 上传data
  19. //
  20. // Responses:
  21. // 200: BaseDataInfo
  22. func UploadAgentDataHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  23. return func(w http.ResponseWriter, r *http.Request) {
  24. if err := r.ParseMultipartForm(defaultMultipartMemory); err != nil {
  25. httpx.Error(w, err)
  26. return
  27. }
  28. l := agent.NewUploadAgentDataLogic(r.Context(), svcCtx)
  29. file, header, err := r.FormFile("file")
  30. agentIds, ok := r.Form["agentId"]
  31. if err != nil {
  32. httpx.ErrorCtx(r.Context(), w, err)
  33. return
  34. }
  35. if !ok || len(agentIds) != 1 {
  36. httpx.ErrorCtx(r.Context(), w, errors.New("agentId cannot be null"))
  37. return
  38. }
  39. if file == nil {
  40. httpx.ErrorCtx(r.Context(), w, errors.New("upload file cannot be null"))
  41. return
  42. }
  43. //l.Logger.Infof("header=%+v size=%d filename=%v\n", header.Header, header.Size, header.Filename)
  44. if header.Header.Get("Content-Type") != "text/csv" {
  45. httpx.ErrorCtx(r.Context(), w, errors.New("file format must be csv"))
  46. return
  47. }
  48. agentId, _ := strconv.Atoi(agentIds[0])
  49. var req types.UploadDataReq
  50. if err := httpx.Parse(r, &req, true); err != nil {
  51. httpx.ErrorCtx(r.Context(), w, err)
  52. return
  53. }
  54. resp, err := l.UploadAgentData(&req, file, uint64(agentId))
  55. // 删除临时文件
  56. _ = r.MultipartForm.RemoveAll()
  57. if err != nil {
  58. httpx.ErrorCtx(r.Context(), w, err)
  59. } else {
  60. httpx.OkJsonCtx(r.Context(), w, resp)
  61. }
  62. }
  63. }