gitee.com/h79/goutils@v1.22.10/common/file/qnyoss/oss.go (about) 1 package qnyoss 2 3 import ( 4 "context" 5 "fmt" 6 fileconfig "gitee.com/h79/goutils/common/file/config" 7 "github.com/qiniu/api.v7/v7/auth" 8 "github.com/qiniu/api.v7/v7/storage" 9 ) 10 11 type OssFile struct { 12 config fileconfig.Config 13 } 14 15 func NewOssFile(config fileconfig.Config) *OssFile { 16 return &OssFile{config: config} 17 } 18 19 // UploadToken 获取七牛云Token 20 func (of *OssFile) UploadToken(bucket string, key string) string { 21 putPolicy := storage.PutPolicy{ 22 Scope: fmt.Sprintf("%s:%s", bucket, key), 23 } 24 putPolicy.Expires = uint64(of.config.Expires) 25 cred := auth.New(of.config.AccessKey, of.config.SecretKey) 26 27 return putPolicy.UploadToken(cred) 28 } 29 30 func (of *OssFile) UploadStream(fileResult *fileconfig.Result, stream *fileconfig.Stream) error { 31 32 upToken := of.UploadToken(stream.Bucket, stream.Key) 33 34 region, exist := storage.GetRegionByID(storage.RegionID(of.config.Region)) 35 if !exist { 36 return fmt.Errorf("region not found") 37 } 38 39 cfg := storage.Config{} 40 // 空间对应的机房 41 cfg.Zone = ®ion 42 // 是否使用https域名 43 cfg.UseHTTPS = of.config.UseHTTPS 44 // 上传是否使用CDN上传加速 45 cfg.UseCdnDomains = of.config.UseCdn 46 47 formUploader := storage.NewFormUploader(&cfg) 48 ret := storage.PutRet{} 49 extra := storage.PutExtra{} 50 51 if err := formUploader.Put(context.Background(), 52 &ret, upToken, stream.Key, stream.Reader, stream.Size, &extra); err != nil { 53 return err 54 } 55 fileResult.Key = ret.Key 56 fileResult.Url = of.config.Cdn + fileResult.Key 57 return nil 58 }