upload 上传 签名 直接上传都可以

This commit is contained in:
eson
2023-07-07 17:49:12 +08:00
parent 975fe89eca
commit 7818b88b70
9 changed files with 120 additions and 66 deletions

View File

@@ -5,7 +5,6 @@ import (
"fusenapi/utils/basic"
"fusenapi/utils/check"
"fusenapi/utils/format"
"log"
"time"
"context"
@@ -69,50 +68,27 @@ func (l *UploadFileBackendLogic) UploadFileBackend(req *types.RequestUploadFileB
req.File.Filename,
))
var bucketName *string
switch category {
case format.TCategoryRenderMegre:
lifecycleConfiguration := &s3.BucketLifecycleConfiguration{
Rules: []*s3.LifecycleRule{
{
Status: aws.String("Enabled"),
// Status: aws.String("Disabled"),
Filter: &s3.LifecycleRuleFilter{
Prefix: ObjectKey,
},
Expiration: &s3.LifecycleExpiration{
// Date: aws.Time(time.Now().UTC().Add(time.Minute)),
Days: aws.Int64(1), // 设置过期天数例如30天
},
// ID: aws.String("ExpireAfter01Days"), // 设置规则的唯一标识符
},
},
}
s3req, _ = svc.PutBucketLifecycleConfigurationRequest(
&s3.PutBucketLifecycleConfigurationInput{
Bucket: basic.StorageBucketName,
LifecycleConfiguration: lifecycleConfiguration,
},
)
bucketName = basic.TempfileBucketName
default:
s3req, _ = svc.PutObjectRequest(
&s3.PutObjectInput{
Bucket: basic.StorageBucketName,
Key: ObjectKey,
},
)
bucketName = basic.StorageBucketName
}
s3req, _ = svc.PutObjectRequest(
&s3.PutObjectInput{
Bucket: bucketName,
Key: ObjectKey,
},
)
s3req.SetBufferBody(req.File.Data)
err := s3req.Send()
if err != nil {
logx.Error(err)
return resp.SetStatus(basic.CodeS3PutObjectRequestErr)
}
log.Println(s3req.HTTPRequest.URL)
logx.Info(s3req.HTTPRequest.URL.String())
return resp.SetStatus(basic.CodeOK, map[string]interface{}{
"upload_url": s3req.HTTPRequest.URL.String(),
})

View File

@@ -61,18 +61,28 @@ func (l *UploadFileFrontendLogic) UploadFileFrontend(req *types.RequestUploadFil
}
now := time.Now()
category := format.TypeCategory(req.Category)
ObjectKey := aws.String(format.FormatS3KeyName(
keytype,
uid,
now,
l.svcCtx.Config.Env,
format.TypeCategory(req.Category),
req.FileName,
))
var bucketName *string
switch category {
case format.TCategoryRenderMegre:
bucketName = basic.TempfileBucketName
default:
bucketName = basic.StorageBucketName
}
s3req, _ := svc.PutObjectRequest(
&s3.PutObjectInput{
Bucket: aws.String("storage.fusenpack.com"),
Key: aws.String(format.FormatS3KeyName(
keytype,
uid,
now,
l.svcCtx.Config.Env,
format.TypeCategory(req.Category),
req.FileName,
)),
Bucket: bucketName,
Key: ObjectKey,
ContentLength: aws.Int64(req.FileSize),
},
)
@@ -81,7 +91,6 @@ func (l *UploadFileFrontendLogic) UploadFileFrontend(req *types.RequestUploadFil
if err != nil {
return resp.SetStatus(basic.CodeS3PutObjectRequestErr)
}
// log.Println(uri)
return resp.SetStatus(basic.CodeOK, map[string]interface{}{
"upload_url": uri,

View File

@@ -4,6 +4,8 @@ import (
"fmt"
"fusenapi/utils/format"
fstests "fusenapi/utils/fstests"
"log"
"os"
"testing"
"github.com/474420502/requests"
@@ -19,16 +21,24 @@ func TestCaseRenderMegre(t *testing.T) {
ses := fstests.GetSessionWithUserToken(t, userver, cnf.Host, cnf.Port)
tp := ses.Post(fmt.Sprintf("http://%s:%d/upload/upload-file-backend", cnf.Host, cnf.Port))
// data, err := ioutil.ReadFile("./fusen.webp")
// if err != nil {
// t.Error(err)
// return
// }
mp := tp.CreateBodyMultipart()
mp.WriteField("file_type", "image")
mp.WriteField("category", string(format.TCategoryRenderMegre))
mp.CreateFormFile("file", "./fusen.web")
f, err := os.Open("./fusen.webp")
if err != nil {
panic(err)
}
err = mp.AddFieldFile("file", f.Name(), f)
if err != nil {
log.Println(err)
}
err = mp.AddField("file_type", "image")
if err != nil {
panic(err)
}
err = mp.AddField("category", string(format.TCategoryRenderMegre))
if err != nil {
panic(err)
}
tp.SetBodyFormData(mp)
// 向服务器发送 GET 请求,获取用户基本信息

View File

@@ -3,6 +3,7 @@ package test
import (
"fmt"
"fusenapi/server/upload/internal/types"
"fusenapi/utils/format"
fstests "fusenapi/utils/fstests"
"io/ioutil"
"log"
@@ -66,3 +67,58 @@ func TestCasePersonalization(t *testing.T) {
t.Error("put failed")
}
}
func TestCaseRenderMegreF(t *testing.T) {
var err error
var resp *requests.Response
var result gjson.Result
// 获取 session并携带 JWT token
ses := fstests.GetSessionWithUserToken(t, userver, cnf.Host, cnf.Port)
tp := ses.Post(fmt.Sprintf("http://%s:%d/upload/upload-file-frontend", cnf.Host, cnf.Port))
data, err := ioutil.ReadFile("./fusen.webp")
if err != nil {
t.Error(err)
return
}
req := types.RequestUploadFileFrontend{
FileName: "fusen.webp", FileType: "image", FileSize: int64(len(data)),
Category: string(format.TCategoryRenderMegre),
}
tp.SetBodyJson(req)
// 向服务器发送 GET 请求,获取用户基本信息
resp, err = tp.TestExecute(gserver)
if err != nil {
t.Error(err)
}
result = resp.Json()
if result.Get("code").Int() != 200 {
t.Error("code != 200")
}
if !result.Get("data").Exists() {
t.Error("data not exists")
}
if !result.Get("data.upload_url").Exists() {
t.Error("upload_url not exists")
}
log.Println(result)
uri := result.Get("data.upload_url").String()
tpUpload := requests.NewSession().Put(uri)
tpUpload.SetBodyStream(data)
resp, err = tpUpload.Execute()
if err != nil {
t.Error(err)
}
if resp.GetStatusCode() != 200 {
t.Error("put failed")
}
}