|
|
@@ -10,22 +10,52 @@ import (
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
- QINIU_REGION_HUANAN = storage.RIDHuanan
|
|
|
+ DEF_REGION = storage.RIDHuabei
|
|
|
)
|
|
|
|
|
|
-func NewQiniuOss(accessKey, secretKey, bucket string, region storage.RegionID) oss.IOss {
|
|
|
- return &qiniuOss{
|
|
|
+type QiniuOption func(*QiniuOss)
|
|
|
+
|
|
|
+func WithHTTPS(use bool) QiniuOption {
|
|
|
+ return func(qo *QiniuOss) {
|
|
|
+ qo.https = use
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func WithCDN(use bool) QiniuOption {
|
|
|
+ return func(qo *QiniuOss) {
|
|
|
+ qo.cdn = use
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func WithRegion(region storage.RegionID) QiniuOption {
|
|
|
+ return func(qo *QiniuOss) {
|
|
|
+ qo.region = region
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func NewQiniuOss(accessKey, secretKey, bucket string, opts ...QiniuOption) oss.IOss {
|
|
|
+ qiniu := &QiniuOss{
|
|
|
accessKey: accessKey,
|
|
|
secretKey: secretKey,
|
|
|
bucket: bucket,
|
|
|
- region: region,
|
|
|
+ region: DEF_REGION,
|
|
|
+ https: false,
|
|
|
+ cdn: false,
|
|
|
}
|
|
|
+
|
|
|
+ for _, opt := range opts {
|
|
|
+ opt(qiniu)
|
|
|
+ }
|
|
|
+
|
|
|
+ return qiniu
|
|
|
}
|
|
|
|
|
|
-type qiniuOss struct {
|
|
|
+type QiniuOss struct {
|
|
|
accessKey, secretKey string
|
|
|
bucket string
|
|
|
region storage.RegionID
|
|
|
+ https bool
|
|
|
+ cdn bool
|
|
|
}
|
|
|
|
|
|
type qiniuUploadReturn struct {
|
|
|
@@ -34,7 +64,7 @@ type qiniuUploadReturn struct {
|
|
|
Bucket, Name string
|
|
|
}
|
|
|
|
|
|
-func (self *qiniuOss) UploadFile(absPath string, key string, conf *oss.UploadConf) (string, error) {
|
|
|
+func (self *QiniuOss) UploadFile(absPath string, key string, conf *oss.UploadConf) (string, error) {
|
|
|
scope := self.bucket
|
|
|
if conf != nil && conf.Overwrite {
|
|
|
scope = fmt.Sprintf("%s:%s", self.bucket, key)
|
|
|
@@ -50,17 +80,18 @@ func (self *qiniuOss) UploadFile(absPath string, key string, conf *oss.UploadCon
|
|
|
}
|
|
|
cfg := storage.Config{
|
|
|
Zone: &zone,
|
|
|
- UseHTTPS: false,
|
|
|
- UseCdnDomains: false,
|
|
|
+ UseHTTPS: self.https,
|
|
|
+ UseCdnDomains: self.cdn,
|
|
|
}
|
|
|
formUploader := storage.NewFormUploader(&cfg)
|
|
|
putExtra := storage.PutExtra{}
|
|
|
ret := qiniuUploadReturn{}
|
|
|
err := formUploader.PutFile(context.Background(), &ret, upToken, key, absPath, &putExtra)
|
|
|
- return ret.Name, err
|
|
|
+ //fmt.Printf("%v\n", ret)
|
|
|
+ return ret.Key, err
|
|
|
}
|
|
|
|
|
|
-func (self *qiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.UploadConf) (string, error) {
|
|
|
+func (self *QiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.UploadConf) (string, error) {
|
|
|
scope := self.bucket
|
|
|
if conf != nil && conf.Overwrite {
|
|
|
scope = fmt.Sprintf("%s:%s", self.bucket, key)
|
|
|
@@ -76,17 +107,17 @@ func (self *qiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.
|
|
|
}
|
|
|
cfg := storage.Config{
|
|
|
Zone: &zone,
|
|
|
- UseHTTPS: false,
|
|
|
- UseCdnDomains: false,
|
|
|
+ UseHTTPS: self.https,
|
|
|
+ UseCdnDomains: self.cdn,
|
|
|
}
|
|
|
formUploader := storage.NewFormUploader(&cfg)
|
|
|
putExtra := storage.PutExtra{}
|
|
|
ret := qiniuUploadReturn{}
|
|
|
err := formUploader.Put(context.Background(), &ret, upToken, key, reader, len, &putExtra)
|
|
|
- return ret.Name, err
|
|
|
+ return ret.Key, err
|
|
|
}
|
|
|
|
|
|
-func (self *qiniuOss) Delete(key string) error {
|
|
|
+func (self *QiniuOss) Delete(key string) error {
|
|
|
mac := qbox.NewMac(self.accessKey, self.secretKey)
|
|
|
cfg := storage.Config{
|
|
|
UseHTTPS: false,
|
|
|
@@ -95,12 +126,12 @@ func (self *qiniuOss) Delete(key string) error {
|
|
|
return bucketManager.Delete(self.bucket, key)
|
|
|
}
|
|
|
|
|
|
-func (self *qiniuOss) Exists(key string) (bool, error) {
|
|
|
+func (self *QiniuOss) Exists(key string) (bool) {
|
|
|
mac := qbox.NewMac(self.accessKey, self.secretKey)
|
|
|
cfg := storage.Config{
|
|
|
UseHTTPS: false,
|
|
|
}
|
|
|
bucketManager := storage.NewBucketManager(mac, &cfg)
|
|
|
fileInfo, err := bucketManager.Stat(self.bucket, key)
|
|
|
- return len(fileInfo.Hash) > 0, err
|
|
|
+ return len(fileInfo.Hash) > 0 && err == nil
|
|
|
}
|