qiniu.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package store
  2. import (
  3. "bytes"
  4. "context"
  5. "github.com/qiniu/api.v7/v7/auth/qbox"
  6. "github.com/qiniu/api.v7/v7/storage"
  7. "mime/multipart"
  8. "path/filepath"
  9. )
  10. type Qn struct {
  11. access string
  12. secret string
  13. bucket string
  14. zone string
  15. cfg storage.Config
  16. upToken string
  17. mac *qbox.Mac
  18. bucketManager *storage.BucketManager
  19. }
  20. var zone_map = map[string]*storage.Zone{
  21. "huanan": &storage.ZoneHuanan,
  22. "huadong": &storage.ZoneHuadong,
  23. "huabei": &storage.ZoneHuabei,
  24. "beimei": &storage.ZoneBeimei,
  25. }
  26. func NewQn(accessKey, secretKey, bucket, zone string) *Qn {
  27. qn := &Qn{
  28. access: accessKey,
  29. secret: secretKey,
  30. bucket: bucket,
  31. zone: zone,
  32. }
  33. putPolicy := storage.PutPolicy{
  34. Scope: bucket,
  35. }
  36. qn.mac = qbox.NewMac(accessKey, secretKey)
  37. qn.upToken = putPolicy.UploadToken(qn.mac)
  38. qn.cfg = storage.Config{}
  39. _, ok := zone_map[zone]
  40. if ok {
  41. qn.cfg.Zone = zone_map[zone]
  42. } else {
  43. qn.cfg.Zone = &storage.ZoneHuanan
  44. }
  45. qn.cfg.UseHTTPS = false
  46. qn.cfg.UseCdnDomains = false
  47. qn.bucketManager = storage.NewBucketManager(qn.mac, &qn.cfg)
  48. return qn
  49. }
  50. /**
  51. 上传, 返回上传后的文件名
  52. */
  53. func (self *Qn) Upload(absfile string) (string, error) {
  54. formUploader := storage.NewFormUploader(&self.cfg)
  55. ret := storage.PutRet{}
  56. putExtra := storage.PutExtra{}
  57. key := filepath.Base(absfile)
  58. err := formUploader.PutFile(context.Background(), &ret, self.upToken, key, absfile, &putExtra)
  59. if err != nil {
  60. return "", err
  61. }
  62. return ret.Key, nil
  63. }
  64. func (self *Qn) UploadFormFile(fh *multipart.FileHeader) (string, error) {
  65. formUploader := storage.NewFormUploader(&self.cfg)
  66. ret := storage.PutRet{}
  67. putExtra := storage.PutExtra{}
  68. content := []byte("")
  69. contentLen := fh.Size
  70. err := formUploader.PutWithoutKey(context.Background(), &ret, self.upToken,
  71. bytes.NewReader(content), contentLen, &putExtra)
  72. if err != nil {
  73. return "", err
  74. }
  75. return ret.Key, nil
  76. }
  77. func (self *Qn) Delete(url string) error {
  78. key := filepath.Base(url)
  79. return self.bucketManager.Delete(self.bucket, key)
  80. }