upload_controller.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package controller
  2. import (
  3. uuid "github.com/iris-contrib/go.uuid"
  4. "github.com/kataras/iris/v12/mvc"
  5. "io"
  6. "mime/multipart"
  7. "os"
  8. "path/filepath"
  9. "strings"
  10. "time"
  11. "xps/cmd/constant"
  12. "xps/pkg/system/service"
  13. "xps/pkg/utils"
  14. )
  15. // client version and secret, it should be from client side
  16. const (
  17. UploadDir string = "E:/dev-x/xps-server-g5/cmd/main/public/upload/"
  18. UrlBase string = "/upload/"
  19. )
  20. type FileData struct {
  21. FileInfo *multipart.FileHeader
  22. FileData *multipart.File
  23. }
  24. type UploadController struct {
  25. Base
  26. Service service.UploadService
  27. }
  28. func (c *UploadController) BeforeActivation(b mvc.BeforeActivation) {
  29. b.Handle("POST", "/file", "UploadFile")
  30. b.Handle("POST", "/files", "UploadFiles")
  31. }
  32. // UploadFile :Single Upload
  33. func (c *UploadController) UploadFile() *JsonResult {
  34. ocId := c.GetCurOcId()
  35. userId := c.GetCurUserId()
  36. f, fh, err := c.Ctx.FormFile("uploadfile")
  37. if err != nil {
  38. return ResultErr(err.Error(), nil)
  39. }
  40. defer f.Close()
  41. oldFileName := fh.Filename
  42. targetFileName := c.GenerateNewFileName(oldFileName)
  43. out, err := os.OpenFile(targetFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
  44. if err != nil {
  45. return ResultErr(err.Error(), nil)
  46. }
  47. defer out.Close()
  48. _, err = io.Copy(out, f)
  49. if err != nil {
  50. return ResultErr(err.Error(), nil)
  51. }
  52. targetFile := service.TargetFile{
  53. FileName: oldFileName,
  54. FilePath: targetFileName,
  55. }
  56. file, err := c.Service.UploadFile(ocId, userId, constant.DOC_DIR_TEMP, targetFile)
  57. if err != nil {
  58. return ResultErr(err.Error(), nil)
  59. } else {
  60. return ResultOk("获取成功", file)
  61. }
  62. }
  63. // UploadFiles :Multiple Upload
  64. func (c *UploadController) UploadFiles() *JsonResult {
  65. _, files, err := utils.UploadMultiFiles(c.Ctx)
  66. if err != nil {
  67. return ResultErr(err.Error(), nil)
  68. } else {
  69. return ResultOk("获取成功", files)
  70. }
  71. }
  72. // CreateDateDir Create date directory
  73. func (c *UploadController) CreateDateDir() (srcPath string) {
  74. folderName := time.Now().Format("20060102")
  75. // curPath, _ := os.Getwd()
  76. src := filepath.Join(UploadDir, folderName)
  77. _, err := os.Stat(srcPath)
  78. if os.IsNotExist(err) {
  79. _ = os.Mkdir(src, os.ModePerm)
  80. _ = os.Chmod(src, os.ModePerm)
  81. }
  82. return src
  83. }
  84. // GenerateNewFileName Generate new file name
  85. func (c *UploadController) GenerateNewFileName(oldFileName string) (srcPath string) {
  86. u1, _ := uuid.NewV4()
  87. newFileName := u1.String()
  88. src := c.CreateDateDir()
  89. dotIndex := strings.LastIndex(oldFileName, ".")
  90. if dotIndex != -1 && dotIndex != 0 {
  91. newFileName += oldFileName[dotIndex:]
  92. }
  93. src = filepath.Join(src, newFileName)
  94. return src
  95. }