76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
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
|
|
}
|