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 }