upload_api.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * @description:
  3. * @Author: CP
  4. * @Date: 2021-03-31 15:06:21
  5. * @FilePath: \design_quantity\web\api\upload_api.go
  6. */
  7. package api
  8. import (
  9. "bytes"
  10. "fmt"
  11. "io"
  12. "log"
  13. "os"
  14. "time"
  15. "github.com/kataras/iris/v12"
  16. "go.mod/conf"
  17. "go.mod/services"
  18. "go.mod/web/utils"
  19. "go.mod/web/viewmodels"
  20. )
  21. type UploadApi struct {
  22. //框架-web应用上下文环境
  23. Ctx iris.Context
  24. // // 需要用的service
  25. ServiceContract services.ContractService
  26. }
  27. // Upload : 处理文件上传
  28. func (c *UploadApi) Post() {
  29. errCode := 0
  30. defer func() {
  31. if errCode < 0 {
  32. c.Ctx.JSON(iris.Map{"code": -1, "msg": "上传失败"})
  33. } else {
  34. c.Ctx.JSON(iris.Map{"code": 0, "msg": "上传成功"})
  35. }
  36. return
  37. }()
  38. file, head, err := c.Ctx.FormFile("file")
  39. if err != nil {
  40. log.Printf("Failed to get form data, err:%s\n", err.Error())
  41. errCode = -1
  42. return
  43. }
  44. defer file.Close()
  45. buf := bytes.NewBuffer(nil)
  46. if _, err := io.Copy(buf, file); err != nil {
  47. log.Printf("Failed to get file data, err:%s\n", err.Error())
  48. errCode = -2
  49. return
  50. }
  51. fmt.Println(head.Header)
  52. // 文件元信息-todo
  53. // FileName := head.Filename
  54. FileSize := int64(len(buf.Bytes()))
  55. UploadAt := time.Now().Format("2006-01-02 15:04:05")
  56. Location := conf.MergeLocalRootDir + UploadAt + head.Filename // 存储地址
  57. newFile, err := os.Create(Location)
  58. if err != nil {
  59. log.Printf("Failed to create file, err:%s\n", err.Error())
  60. errCode = -3
  61. return
  62. }
  63. defer newFile.Close()
  64. nByte, err := newFile.Write(buf.Bytes())
  65. if int64(nByte) != FileSize || err != nil {
  66. log.Printf("Failed to save data into file, writtenSize:%d, err:%s\n", nByte, err.Error())
  67. errCode = -4
  68. return
  69. }
  70. treeVM := &viewmodels.TreeSectionContract{}
  71. err = c.Ctx.ReadForm(treeVM)
  72. if err != nil {
  73. log.Println("folder-ValidRule-ReadForm转换异常, error=", err)
  74. errCode = -6
  75. return
  76. }
  77. id, err := utils.GetDecryptId(treeVM.Id)
  78. if err != nil {
  79. errCode = -6
  80. return
  81. }
  82. err = c.ServiceContract.SaveUpload(Location, head.Filename, id)
  83. if err != nil {
  84. errCode = -6
  85. return
  86. }
  87. }