| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package upload
- import (
- "context"
- "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/api/v1/system"
- "io"
- "net/http"
- "net/url"
- "strconv"
- "strings"
- )
- type Tencent struct {
- }
- func (s *Tencent) Upload(ctx context.Context, file *ghttp.UploadFile) (result system.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 + 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 = system.UploadResponse{
- Size: file.Size,
- Path: rawUrl + path,
- FullPath: rawUrl + path,
- Name: file.Filename,
- Type: file.Header.Get("Content-type"),
- }
- return
- }
|