oss.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package entity
  2. import (
  3. "crypto/sha256"
  4. "fmt"
  5. "io"
  6. "net/url"
  7. "os"
  8. "path/filepath"
  9. "app.yhyue.com/moapp/jybase/common"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  12. )
  13. var Ossclient *oss.Client
  14. func OssInit(ossEndpoint, ossAccessKeyID, ossAccessKeySecret string) {
  15. client, err := oss.New(ossEndpoint, ossAccessKeyID, ossAccessKeySecret)
  16. if err != nil {
  17. logx.Error("Error:", err)
  18. os.Exit(-1)
  19. }
  20. Ossclient = client
  21. }
  22. // OssPutObject oss附件上传
  23. func OssPutObject(objectName string, fd io.Reader, ossBucketName string) (bool, error) {
  24. defer common.Catch()
  25. // 获取存储空间。
  26. bucket, err := Ossclient.Bucket(ossBucketName)
  27. if err != nil {
  28. logx.Error("Error:", err)
  29. return false, err
  30. }
  31. fileNameOnly := getFileNameOnly(objectName)
  32. fileExtension := TypeByExt(objectName)
  33. option := []oss.Option{
  34. // oss.ContentDisposition("attachment;filename=" + objectName),
  35. oss.ContentDisposition("attachment;filename=" + url.QueryEscape(fileNameOnly) + "." + fileExtension + ";filename*=UTF-8''" + url.QueryEscape(fileNameOnly) + "." + fileExtension),
  36. oss.ContentType("application/octet-stream"),
  37. oss.ACReqHeaders("Access-Control-Allow-Origin"),
  38. oss.ACReqMethod("*"),
  39. }
  40. // 上传文件流。 文件超过1M 上传时间超时(发现是受控制台日志打印影响,现已把日志单独处理,注释协程)
  41. err = bucket.PutObject(objectName, fd, option...)
  42. if err != nil {
  43. logx.Error("file upload false:", err)
  44. return false, err
  45. }
  46. return true, nil
  47. }
  48. //删除附件
  49. func OssDelObject(objectName, ossBucketName string) (bool, error) {
  50. defer common.Catch()
  51. // 获取存储信息
  52. bucket, err := Ossclient.Bucket(ossBucketName)
  53. if err != nil {
  54. logx.Error("Error:", err)
  55. return false, err
  56. }
  57. //附件是否存在 存在再删除
  58. if ok, _ := bucket.IsObjectExist(objectName); !ok {
  59. err = bucket.DeleteObject(objectName)
  60. if err != nil {
  61. logx.Error("file del false:", err)
  62. return false, err
  63. }
  64. }
  65. return true, err
  66. }
  67. func GetHashKey(bs []byte) string {
  68. defer common.Catch()
  69. ha := sha256.New()
  70. ha.Write(bs)
  71. hbs := ha.Sum(nil)
  72. key := fmt.Sprintf("%x", hbs)
  73. return key
  74. }
  75. func TypeByExt(path string) string {
  76. for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- {
  77. if path[i] == '.' {
  78. return path[i:]
  79. }
  80. }
  81. return ""
  82. }
  83. // 获取文件名称(不带后缀)
  84. func getFileNameOnly(filename string) string {
  85. extension := filepath.Ext(filename)
  86. fileNameOnly := filename[0 : len(filename)-len(extension)]
  87. return fileNameOnly
  88. }