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 = &region
    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  }