file.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package services
  2. import (
  3. "errors"
  4. "eta/eta_api/models"
  5. "eta/eta_api/utils"
  6. "fmt"
  7. "io"
  8. "mime/multipart"
  9. "os"
  10. "time"
  11. )
  12. // UploadToOssAndFileName 上传到oss并使用这个名称
  13. func UploadToOssAndFileName(fileMulti multipart.File, newFileName string) (resourceUrl string, err error) {
  14. dateDir := time.Now().Format("20060102")
  15. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  16. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  17. if err != nil {
  18. err = errors.New("存储目录创建失败,Err:" + err.Error())
  19. return
  20. }
  21. //本地地址
  22. fpath := uploadDir + "/" + newFileName
  23. err = saveToFile(fileMulti, fpath)
  24. if err != nil {
  25. err = errors.New("文件上传失败,Err:" + err.Error())
  26. return
  27. }
  28. //上传到阿里云 和 minio
  29. //if utils.ObjectStorageClient == "minio" {
  30. // resourceUrl, err = UploadImgToMinIo(newFileName, fpath)
  31. // if err != nil {
  32. // err = errors.New("文件上传失败,Err:" + err.Error())
  33. // return
  34. // }
  35. //} else {
  36. // resourceUrl, err = UploadAliyunV2(newFileName, fpath)
  37. // if err != nil {
  38. // err = errors.New("文件上传失败,Err:" + err.Error())
  39. // return
  40. // }
  41. //}
  42. ossClient := NewOssClient()
  43. if ossClient == nil {
  44. err = fmt.Errorf("初始化OSS服务失败")
  45. return
  46. }
  47. resourceUrl, err = ossClient.UploadFile(newFileName, fpath, "")
  48. if err != nil {
  49. err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
  50. return
  51. }
  52. defer func() {
  53. os.Remove(fpath)
  54. }()
  55. item := new(models.Resource)
  56. item.ResourceUrl = resourceUrl
  57. item.ResourceType = 1
  58. item.CreateTime = time.Now()
  59. _, err = models.AddResource(item)
  60. if err != nil {
  61. err = errors.New("资源上传失败,Err:" + err.Error())
  62. return
  63. }
  64. return
  65. }
  66. // saveToFile 保存到本地文件
  67. func saveToFile(fileMulti multipart.File, tofile string) error {
  68. f, err := os.OpenFile(tofile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
  69. if err != nil {
  70. return err
  71. }
  72. defer f.Close()
  73. io.Copy(f, fileMulti)
  74. return nil
  75. }