upload_api.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. "strings"
  15. "time"
  16. "github.com/kataras/iris/v12"
  17. "go.mod/conf"
  18. "go.mod/services"
  19. )
  20. type UploadApi struct {
  21. //框架-web应用上下文环境
  22. Ctx iris.Context
  23. // // 需要用的service
  24. ServiceContract services.ContractService
  25. }
  26. // Upload : 处理文件上传
  27. func (c *UploadApi) Post() {
  28. errCode := 0
  29. id := "0"
  30. defer func() {
  31. if errCode < 0 {
  32. fmt.Println("errCode", errCode)
  33. c.Ctx.JSON(iris.Map{"code": -1, "msg": "上传失败"})
  34. } else {
  35. c.Ctx.JSON(iris.Map{"code": 0, "msg": "上传成功", "data": id})
  36. }
  37. return
  38. }()
  39. file, head, err := c.Ctx.FormFile("file")
  40. if err != nil {
  41. log.Printf("Failed to get form data, err:%s\n", err.Error())
  42. fmt.Println("1111")
  43. errCode = -1
  44. return
  45. }
  46. defer file.Close()
  47. buf := bytes.NewBuffer(nil)
  48. if _, err := io.Copy(buf, file); err != nil {
  49. log.Printf("Failed to get file data, err:%s\n", err.Error())
  50. fmt.Println("2222")
  51. errCode = -2
  52. return
  53. }
  54. // 文件元信息-todo
  55. // FileName := head.Filename
  56. FileSize := int64(len(buf.Bytes()))
  57. UploadAt := fmt.Sprintf("%d", time.Now().UnixNano())
  58. Location := conf.MergeLocalRootDir + UploadAt + head.Filename // 存储地址
  59. webLocation := "/public/" + UploadAt + head.Filename
  60. newFile, err := os.Create(Location)
  61. if err != nil {
  62. fmt.Println("33333")
  63. log.Printf("Failed to create file, err:%s\n", err.Error())
  64. errCode = -3
  65. return
  66. }
  67. defer newFile.Close()
  68. nByte, err := newFile.Write(buf.Bytes())
  69. if int64(nByte) != FileSize || err != nil {
  70. fmt.Println("44444")
  71. log.Printf("Failed to save data into file, writtenSize:%d, err:%s\n", nByte, err.Error())
  72. errCode = -4
  73. return
  74. }
  75. // fmt.Println(c.Ctx.FormValue("id"))
  76. // treeVM := &viewmodels.TreeSectionContract{}
  77. // err = c.Ctx.ReadForm(treeVM)
  78. // if err != nil {
  79. // log.Println("folder-ValidRule-ReadForm转换异常, error=", err)
  80. // errCode = -6
  81. // return
  82. // }
  83. // fmt.Println(treeVM)
  84. // id, err := utils.GetDecryptId(treeVM.Id)
  85. // if err != nil {
  86. // errCode = -6
  87. // return
  88. // }
  89. ext := strings.Join(head.Header["Content-Type"], "")
  90. id, err = c.ServiceContract.SaveUpload(webLocation, head.Filename, ext)
  91. if err != nil {
  92. fmt.Println("55555")
  93. errCode = -6
  94. return
  95. }
  96. }