87 lines
2.2 KiB
Go

package upload
import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gfile"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/grand"
"github.com/tencentyun/cos-go-sdk-v5"
"github.com/tencentyun/cos-go-sdk-v5/debug"
"github.com/tiger1103/gfast/v3/internal/app/common/model"
"io"
"net/http"
"net/url"
"strconv"
"strings"
)
type Tencent struct {
}
func (s *Tencent) Upload(ctx context.Context, file *ghttp.UploadFile) (result *model.UploadResponse, err error) {
v, err := g.Cfg().Get(ctx, "upload.tencentCOS")
if err != nil {
return
}
m := v.MapStrVar()
var (
upPath = m["upPath"].String()
rawUrl = m["rawUrl"].String()
secretID = m["secretID"].String()
secretKey = m["secretKey"].String()
)
name := gfile.Basename(file.Filename)
name = strings.ToLower(strconv.FormatInt(gtime.TimestampNano(), 36) + grand.S(6))
name = name + gfile.Ext(file.Filename)
path := upPath + gtime.Date() + "/" + name
url, _ := url.Parse(rawUrl)
b := &cos.BaseURL{BucketURL: url}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: secretID,
SecretKey: secretKey,
Transport: &debug.DebugRequestTransport{
RequestHeader: false,
RequestBody: false,
ResponseHeader: false,
ResponseBody: false,
},
},
})
opt := &cos.ObjectPutOptions{
ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{
ContentLength: int64(file.Size),
},
}
var f io.ReadCloser
f, err = file.Open()
if err != nil {
return
}
defer f.Close()
_, err = client.Object.Put(context.Background(), path, f, opt)
result = &model.UploadResponse{
Size: file.Size,
Path: rawUrl + path,
FullPath: rawUrl + path,
Name: file.Filename,
Type: file.Header.Get("Content-type"),
}
return
}
func (s *Tencent) CheckMultipart(ctx context.Context, req *model.CheckMultipartReq) (res *model.CheckMultipartRes, err error) {
err = gerror.New("当前驱动暂不支持分片上传!")
return
}
func (s *Tencent) UploadPart(ctx context.Context, req *model.UploadPartReq) (res *model.UploadPartRes, err error) {
err = gerror.New("当前驱动暂不支持分片上传!")
return
}