| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package osssvr
- import (
- "context"
- "fmt"
- "io"
- "kettle/oss"
- "github.com/qiniu/go-sdk/v7/auth/qbox"
- "github.com/qiniu/go-sdk/v7/storage"
- )
- const (
- DEF_REGION = storage.RIDHuabei
- )
- 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: DEF_REGION,
- https: false,
- cdn: false,
- }
- for _, opt := range opts {
- opt(qiniu)
- }
- return qiniu
- }
- type QiniuOss struct {
- accessKey, secretKey string
- bucket string
- region storage.RegionID
- https bool
- cdn bool
- }
- type qiniuUploadReturn struct {
- Key, Hash string
- Fsize int
- Bucket, Name string
- }
- 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)
- }
- putPolicy := storage.PutPolicy{
- Scope: scope,
- ReturnBody: `{"key":"$(key)", "hash":"$(etag)", "fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
- }
- mac := qbox.NewMac(self.accessKey, self.secretKey)
- upToken := putPolicy.UploadToken(mac)
- zone, found := storage.GetRegionByID(self.region)
- if !found {
- }
- cfg := storage.Config{
- Zone: &zone,
- 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)
- //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) {
- scope := self.bucket
- if conf != nil && conf.Overwrite {
- scope = fmt.Sprintf("%s:%s", self.bucket, key)
- }
- putPolicy := storage.PutPolicy{
- Scope: scope,
- ReturnBody: `{"key":"$(key)", "hash":"$(etag)", "fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
- }
- mac := qbox.NewMac(self.accessKey, self.secretKey)
- upToken := putPolicy.UploadToken(mac)
- zone, found := storage.GetRegionByID(self.region)
- if !found {
- }
- cfg := storage.Config{
- Zone: &zone,
- 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.Key, err
- }
- func (self *QiniuOss) Delete(key string) error {
- mac := qbox.NewMac(self.accessKey, self.secretKey)
- cfg := storage.Config{
- UseHTTPS: false,
- }
- bucketManager := storage.NewBucketManager(mac, &cfg)
- return bucketManager.Delete(self.bucket, key)
- }
- 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 == nil
- }
|