qiniu.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package osssvr
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/qiniu/go-sdk/v7/auth/qbox"
  6. "github.com/qiniu/go-sdk/v7/storage"
  7. "io"
  8. "one.com/kettle/oss"
  9. )
  10. const (
  11. QINIU_REGION_HUANAN = storage.RIDHuanan
  12. )
  13. func NewQiniuOss(accessKey, secretKey, bucket string, region storage.RegionID) oss.IOss {
  14. return &qiniuOss{
  15. accessKey: accessKey,
  16. secretKey: secretKey,
  17. bucket: bucket,
  18. region: region,
  19. }
  20. }
  21. type qiniuOss struct {
  22. accessKey, secretKey string
  23. bucket string
  24. region storage.RegionID
  25. }
  26. type qiniuUploadReturn struct {
  27. Key, Hash string
  28. Fsize int
  29. Bucket, Name string
  30. }
  31. func (self *qiniuOss) UploadFile(absPath string, key string, conf *oss.UploadConf) (string, error) {
  32. scope := self.bucket
  33. if conf != nil && conf.Overwrite {
  34. scope = fmt.Sprintf("%s:%s", self.bucket, key)
  35. }
  36. putPolicy := storage.PutPolicy{
  37. Scope: scope,
  38. ReturnBody: `{"key":"$(key)", "hash":"$(etag)", "fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
  39. }
  40. mac := qbox.NewMac(self.accessKey, self.secretKey)
  41. upToken := putPolicy.UploadToken(mac)
  42. zone, found := storage.GetRegionByID(self.region)
  43. if !found {
  44. }
  45. cfg := storage.Config{
  46. Zone: &zone,
  47. UseHTTPS: false,
  48. UseCdnDomains: false,
  49. }
  50. formUploader := storage.NewFormUploader(&cfg)
  51. putExtra := storage.PutExtra{}
  52. ret := qiniuUploadReturn{}
  53. err := formUploader.PutFile(context.Background(), &ret, upToken, key, absPath, &putExtra)
  54. return ret.Name, err
  55. }
  56. func (self *qiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.UploadConf) (string, error) {
  57. scope := self.bucket
  58. if conf != nil && conf.Overwrite {
  59. scope = fmt.Sprintf("%s:%s", self.bucket, key)
  60. }
  61. putPolicy := storage.PutPolicy{
  62. Scope: scope,
  63. ReturnBody: `{"key":"$(key)", "hash":"$(etag)", "fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
  64. }
  65. mac := qbox.NewMac(self.accessKey, self.secretKey)
  66. upToken := putPolicy.UploadToken(mac)
  67. zone, found := storage.GetRegionByID(self.region)
  68. if !found {
  69. }
  70. cfg := storage.Config{
  71. Zone: &zone,
  72. UseHTTPS: false,
  73. UseCdnDomains: false,
  74. }
  75. formUploader := storage.NewFormUploader(&cfg)
  76. putExtra := storage.PutExtra{}
  77. ret := qiniuUploadReturn{}
  78. err := formUploader.Put(context.Background(), &ret, upToken, key, reader, len, &putExtra)
  79. return ret.Name, err
  80. }
  81. func (self *qiniuOss) Delete(key string) error {
  82. mac := qbox.NewMac(self.accessKey, self.secretKey)
  83. cfg := storage.Config{
  84. UseHTTPS: false,
  85. }
  86. bucketManager := storage.NewBucketManager(mac, &cfg)
  87. return bucketManager.Delete(self.bucket, key)
  88. }
  89. func (self *qiniuOss) Exists(key string) (bool, error) {
  90. mac := qbox.NewMac(self.accessKey, self.secretKey)
  91. cfg := storage.Config{
  92. UseHTTPS: false,
  93. }
  94. bucketManager := storage.NewBucketManager(mac, &cfg)
  95. fileInfo, err := bucketManager.Stat(self.bucket, key)
  96. return len(fileInfo.Hash) > 0, err
  97. }