任务一完成
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package upload
|
||||
|
||||
import (
|
||||
"context"
|
||||
"mime/multipart"
|
||||
"path"
|
||||
|
||||
"github.com/qiniu/go-sdk/v7/auth/qbox"
|
||||
"github.com/qiniu/go-sdk/v7/storage"
|
||||
)
|
||||
|
||||
// Qiniu 七牛云
|
||||
type Qiniu struct {
|
||||
Zone string
|
||||
Bucket string
|
||||
ImgPath string
|
||||
AccessKey string
|
||||
SecretKey string
|
||||
UseHTTPS bool
|
||||
UseCdnDomains bool
|
||||
}
|
||||
|
||||
// NewQiniu 创建七牛云
|
||||
func NewQiniu(zone, bucket, imgPath, accessKey, secretKey string, useHTTPS, useCdnDomains bool) *Qiniu {
|
||||
return &Qiniu{
|
||||
Zone: zone,
|
||||
Bucket: bucket,
|
||||
ImgPath: imgPath,
|
||||
AccessKey: accessKey,
|
||||
SecretKey: secretKey,
|
||||
UseHTTPS: useHTTPS,
|
||||
UseCdnDomains: useCdnDomains,
|
||||
}
|
||||
}
|
||||
|
||||
func (q *Qiniu) getZone() *storage.Region {
|
||||
switch q.Zone {
|
||||
case "ZoneHuadong":
|
||||
return &storage.ZoneHuadong
|
||||
case "ZoneHuabei":
|
||||
return &storage.ZoneHuabei
|
||||
case "ZoneHuanan":
|
||||
return &storage.ZoneHuanan
|
||||
case "ZoneBeimei":
|
||||
return &storage.ZoneBeimei
|
||||
case "ZoneXinjiapo":
|
||||
return &storage.ZoneXinjiapo
|
||||
default:
|
||||
return &storage.ZoneHuadong
|
||||
}
|
||||
}
|
||||
|
||||
// Upload 上传文件
|
||||
func (q *Qiniu) Upload(file *multipart.FileHeader) (string, string, error) {
|
||||
mac := qbox.NewMac(q.AccessKey, q.SecretKey)
|
||||
putPolicy := storage.PutPolicy{Scope: q.Bucket}
|
||||
upToken := putPolicy.UploadToken(mac)
|
||||
|
||||
cfg := storage.Config{
|
||||
Zone: q.getZone(),
|
||||
UseHTTPS: q.UseHTTPS,
|
||||
UseCdnDomains: q.UseCdnDomains,
|
||||
}
|
||||
formUploader := storage.NewFormUploader(&cfg)
|
||||
|
||||
// 生成文件名和路径
|
||||
fileName := GenerateFileName(file.Filename)
|
||||
filePath := GeneratePath("")
|
||||
key := path.Join(filePath, fileName)
|
||||
|
||||
// 打开文件
|
||||
src, err := file.Open()
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
defer src.Close()
|
||||
|
||||
// 上传
|
||||
ret := storage.PutRet{}
|
||||
err = formUploader.Put(context.Background(), &ret, upToken, key, src, file.Size, nil)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
// 返回访问URL和key
|
||||
accessURL := q.ImgPath + "/" + key
|
||||
return accessURL, key, nil
|
||||
}
|
||||
|
||||
// Delete 删除文件
|
||||
func (q *Qiniu) Delete(key string) error {
|
||||
mac := qbox.NewMac(q.AccessKey, q.SecretKey)
|
||||
cfg := storage.Config{Zone: q.getZone()}
|
||||
bucketManager := storage.NewBucketManager(mac, &cfg)
|
||||
return bucketManager.Delete(q.Bucket, key)
|
||||
}
|
||||
Reference in New Issue
Block a user