123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package controllers
  2. import (
  3. "errors"
  4. "strconv"
  5. "time"
  6. "wechat-conf/utils"
  7. "net/http"
  8. "net/url"
  9. )
  10. // FileUpload 文件上传
  11. func (c *BaseController) FileUpload() {
  12. file, err := c.uploadFileToOSS("file")
  13. if err != nil {
  14. c.ResponseError(err, http.StatusInternalServerError)
  15. }
  16. c.ResponseJSON(map[string]interface{}{
  17. "url": file,
  18. })
  19. }
  20. func (c *BaseController) FileUploadMatrial() (string, error) {
  21. file, err := c.uploadFileToOSS("media")
  22. if err != nil {
  23. utils.LogError("上传图片失败: " + err.Error())
  24. return "", errors.New("上传图片失败")
  25. }
  26. return file, nil
  27. }
  28. func (c *BaseController) uploadFileToOSS(field string) (string, error) {
  29. aliConf, ok := c.Configer[AliYunConf]
  30. if !ok {
  31. return "", errors.New("没有找到阿里云相关配置")
  32. }
  33. endpoint := aliConf.String("oss::Endpoint")
  34. accessKeyID := aliConf.String("oss::AccessKeyId")
  35. accessKeySecret := aliConf.String("oss::AccessKeySecret")
  36. bucket := aliConf.String("oss::Bucket")
  37. aliCli, err := utils.GetOssClient(endpoint, accessKeyID, accessKeySecret)
  38. if err != nil {
  39. return "", err
  40. }
  41. fNameExtra := strconv.FormatInt(time.Now().Unix(), 10)
  42. fileURL, err := utils.UploadFileToBucket(aliCli, c.Ctx.Request, bucket, field, fNameExtra)
  43. if err != nil {
  44. return "", err
  45. }
  46. return fileURL, nil
  47. }
  48. // UploadBase64Image Upload base64-image to ali-oss
  49. // @Title Upload image to ali-oss
  50. // @Description 上传base64图片到阿里云
  51. // @Param UpImgStr form string true "图片控件name"
  52. // @Success 200 { Url } 图片URL
  53. // @Failure >300 error message
  54. func (c *BaseController) UploadBase64Image() {
  55. base64Str, err := url.QueryUnescape(c.GetString("base64str"))
  56. if err != nil {
  57. c.ResponseError(utils.LogError("上传 Base64 图片失败", err))
  58. }
  59. imgURL, err := c.uploadStringToAliOSS(base64Str)
  60. if err != nil {
  61. c.ResponseError(err)
  62. }
  63. resp := map[string]interface{}{
  64. "url": imgURL,
  65. }
  66. c.ResponseJSON(resp)
  67. }
  68. // uploadStringToAliOSS 上传文件到阿里云
  69. func (c *BaseController) uploadStringToAliOSS(fStr string) (string, error) {
  70. aliConf, ok := c.Configer[AliYunConf]
  71. if !ok {
  72. return "", errors.New("没有找到阿里云相关配置")
  73. }
  74. endpoint := aliConf.String("oss::Endpoint")
  75. accessKeyID := aliConf.String("oss::AccessKeyId")
  76. accessKeySecret := aliConf.String("oss::AccessKeySecret")
  77. bucket := aliConf.String("oss::Bucket")
  78. aliCli, err := utils.GetOssClient(endpoint, accessKeyID, accessKeySecret)
  79. if err != nil {
  80. return "", utils.LogError("配置阿里云客户端失败", err)
  81. }
  82. fileURL, err := utils.UploadStringToBucket(aliCli, bucket, fStr)
  83. if err != nil {
  84. return "", utils.LogError("上传文件到阿里云失败", err)
  85. }
  86. return fileURL, nil
  87. }