任务一完成
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package upload
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"path"
|
||||
|
||||
"github.com/tencentyun/cos-go-sdk-v5"
|
||||
)
|
||||
|
||||
// Tencent 腾讯云COS
|
||||
type Tencent struct {
|
||||
Bucket string
|
||||
Region string
|
||||
SecretID string
|
||||
SecretKey string
|
||||
BaseURL string
|
||||
PathPrefix string
|
||||
}
|
||||
|
||||
// NewTencent 创建腾讯云COS
|
||||
func NewTencent(bucket, region, secretID, secretKey, baseURL, pathPrefix string) *Tencent {
|
||||
return &Tencent{
|
||||
Bucket: bucket,
|
||||
Region: region,
|
||||
SecretID: secretID,
|
||||
SecretKey: secretKey,
|
||||
BaseURL: baseURL,
|
||||
PathPrefix: pathPrefix,
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Tencent) getClient() *cos.Client {
|
||||
u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", t.Bucket, t.Region))
|
||||
b := &cos.BaseURL{BucketURL: u}
|
||||
return cos.NewClient(b, &http.Client{
|
||||
Transport: &cos.AuthorizationTransport{
|
||||
SecretID: t.SecretID,
|
||||
SecretKey: t.SecretKey,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// Upload 上传文件
|
||||
func (t *Tencent) Upload(file *multipart.FileHeader) (string, string, error) {
|
||||
client := t.getClient()
|
||||
|
||||
// 生成文件名和路径
|
||||
fileName := GenerateFileName(file.Filename)
|
||||
filePath := GeneratePath(t.PathPrefix)
|
||||
key := path.Join(filePath, fileName)
|
||||
|
||||
// 打开文件
|
||||
src, err := file.Open()
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
defer src.Close()
|
||||
|
||||
// 上传
|
||||
_, err = client.Object.Put(context.Background(), key, src, nil)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
// 返回访问URL和key
|
||||
accessURL := t.BaseURL + "/" + key
|
||||
return accessURL, key, nil
|
||||
}
|
||||
|
||||
// Delete 删除文件
|
||||
func (t *Tencent) Delete(key string) error {
|
||||
client := t.getClient()
|
||||
_, err := client.Object.Delete(context.Background(), key)
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user