diff --git a/go.mod b/go.mod index 049f0e86..3781fbe5 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.20 require ( github.com/474420502/passer v0.0.1 github.com/SebastiaanKlippert/go-wkhtmltopdf v1.9.0 + github.com/aliyun/aliyun-oss-go-sdk v3.0.1+incompatible github.com/aws/aws-sdk-go v1.44.295 github.com/bwmarrin/snowflake v0.3.0 github.com/disintegration/imaging v1.6.2 @@ -37,7 +38,6 @@ require ( github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect github.com/VictoriaMetrics/metrics v1.18.1 // indirect github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect - github.com/aliyun/aliyun-oss-go-sdk v3.0.1+incompatible // indirect github.com/andybalholm/brotli v1.0.5 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/buger/jsonparser v1.1.1 // indirect diff --git a/go.sum b/go.sum index ab5ad91d..882f6c71 100644 --- a/go.sum +++ b/go.sum @@ -87,7 +87,6 @@ github.com/aws/aws-sdk-go v1.44.295 h1:SGjU1+MqttXfRiWHD6WU0DRhaanJgAFY+xIhEaugV github.com/aws/aws-sdk-go v1.44.295/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -189,7 +188,6 @@ github.com/go-ldap/ldap/v3 v3.4.6 h1:ert95MdbiG7aWo/oPYp9btL3KJlMPKnP58r09rI8T+A github.com/go-ldap/ldap/v3 v3.4.6/go.mod h1:IGMQANNtxpsOzj7uUAMjpGBaOVTC4DYyIy8VsTdxmtc= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -351,7 +349,6 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -364,7 +361,6 @@ github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0b github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= @@ -445,7 +441,6 @@ github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOA github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c= github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nacos-group/nacos-sdk-go/v2 v2.2.3 h1:sUQx4f1bXDeeOOEQZjGAitzxYApbYY9fVDbxVCaBW+I= github.com/nacos-group/nacos-sdk-go/v2 v2.2.3/go.mod h1:UL4U89WYdnyajgKJUMpuT1Rr6iNmbjrxOO40JRgtA00= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= diff --git a/server/upload/internal/config/config.go b/server/upload/internal/config/config.go index 64fa35ad..b48dcd4f 100644 --- a/server/upload/internal/config/config.go +++ b/server/upload/internal/config/config.go @@ -26,11 +26,9 @@ type Config struct { Urls []string } AliyunOSS struct { - Endpoint string `json:"endpoint"` - AccessKeyId string `json:"access_key_id"` - AccessKeySecret string `json:"access_key_secret"` - BucketName string `json:"bucket_name"` - BucketUrl string `json:"bucket_url"` - BasePath string `json:"base_path"` + AccessKeyId string + AccessKeySecret string + BasePath string + Endpoint string } } diff --git a/server/upload/internal/logic/uploadfilebackendlogic.go b/server/upload/internal/logic/uploadfilebackendlogic.go index b6666545..0fac27a8 100644 --- a/server/upload/internal/logic/uploadfilebackendlogic.go +++ b/server/upload/internal/logic/uploadfilebackendlogic.go @@ -110,14 +110,12 @@ func (l *UploadFileBackendLogic) UploadFileBackend(req *types.UploadFileBackendR // 是否备份--异步任务 if req.BackupType != "" { upload.UploadType = "oss" - upload.AliyunOSS.Endpoint = l.svcCtx.Config.AliyunOSS.Endpoint upload.AliyunOSS.AccessKeyId = l.svcCtx.Config.AliyunOSS.AccessKeyId upload.AliyunOSS.AccessKeySecret = l.svcCtx.Config.AliyunOSS.AccessKeySecret - upload.AliyunOSS.BucketName = l.svcCtx.Config.AliyunOSS.BucketName - upload.AliyunOSS.BucketUrl = l.svcCtx.Config.AliyunOSS.BucketUrl + upload.AliyunOSS.Endpoint = l.svcCtx.Config.AliyunOSS.Endpoint upload.AliyunOSS.BasePath = l.svcCtx.Config.AliyunOSS.BasePath time.AfterFunc(time.Second*1, func() { - err = upload.UploadFileByUrl(resourceId, uploadRes.ResourceUrl) + err = upload.UploadFileByUrl(resourceId, uploadRes.ResourceUrl, req.UploadBucket) }) } diff --git a/server/upload/internal/logic/uploadfilebaselogic.go b/server/upload/internal/logic/uploadfilebaselogic.go index 0d84bc0f..b028db59 100644 --- a/server/upload/internal/logic/uploadfilebaselogic.go +++ b/server/upload/internal/logic/uploadfilebaselogic.go @@ -92,14 +92,12 @@ func (l *UploadFileBaseLogic) UploadFileBase(req *types.UploadFileBaseReq, useri // 是否备份--异步任务 if req.BackupType != "" { upload.UploadType = "oss" - upload.AliyunOSS.Endpoint = l.svcCtx.Config.AliyunOSS.Endpoint upload.AliyunOSS.AccessKeyId = l.svcCtx.Config.AliyunOSS.AccessKeyId upload.AliyunOSS.AccessKeySecret = l.svcCtx.Config.AliyunOSS.AccessKeySecret - upload.AliyunOSS.BucketName = l.svcCtx.Config.AliyunOSS.BucketName - upload.AliyunOSS.BucketUrl = l.svcCtx.Config.AliyunOSS.BucketUrl + upload.AliyunOSS.Endpoint = l.svcCtx.Config.AliyunOSS.Endpoint upload.AliyunOSS.BasePath = l.svcCtx.Config.AliyunOSS.BasePath time.AfterFunc(time.Second*1, func() { - err = upload.UploadFileByUrl(resourceId, uploadRes.ResourceUrl) + err = upload.UploadFileByUrl(resourceId, uploadRes.ResourceUrl, req.UploadBucket) }) } diff --git a/utils/file/upload.go b/utils/file/upload.go index c96c1d1c..55a134c9 100644 --- a/utils/file/upload.go +++ b/utils/file/upload.go @@ -1,14 +1,12 @@ package file import ( - "bufio" "bytes" "context" "fusenapi/model/gmodel" "fusenapi/utils/basic" "io" "net/http" - "os" "time" "github.com/aliyun/aliyun-oss-go-sdk/oss" @@ -322,39 +320,51 @@ func (upload *Upload) UploadFileByByte(req *UploadBaseReq) (*UploadBaseRes, erro } // 根据URL上传文件 -func (upload *Upload) UploadFileByUrl(fileHash string, url string) error { +func (upload *Upload) UploadFileByUrl(fileHash string, url string, uploadBucket int64) error { + // 定义存储桶名称 + var bucketName string + + // 根据类别选择存储桶 + switch uploadBucket { + case 2: + bucketName = *basic.TempfileBucketName + case 3: + bucketName = *basic.StorageBucketName + default: + bucketName = *basic.StorageBucketName + } switch upload.UploadType { case "oss": + yunFileTmpPath := fileHash // 创建OSSClient实例。 - client, err := oss.New(upload.AliyunOSS.Endpoint, upload.AliyunOSS.AccessKeyId, upload.AliyunOSS.AccessKeySecret) + clientOss, err := oss.New(upload.AliyunOSS.Endpoint, upload.AliyunOSS.AccessKeyId, upload.AliyunOSS.AccessKeySecret) if err != nil { return err } - bucket, err := client.Bucket(upload.AliyunOSS.BucketName) + bucket, err := clientOss.Bucket(bucketName) if err != nil { return err } - // 上传文件。 - file, err := os.Open(url) + + // 创建一个 HTTP 客户端 + client := &http.Client{} + // 发送一个 GET 请求 + resp, err := client.Get(url) if err != nil { return err } - defer file.Close() - yunFileTmpPath := upload.AliyunOSS.BasePath + "/" + fileHash - reader := bufio.NewReader(file) - buffer := make([]byte, 4096) - for { - n, err := reader.Read(buffer) - if err != nil { - if err == io.EOF { - break - } - return err - } - err = bucket.PutObject(yunFileTmpPath, bytes.NewReader(buffer[:n])) - if err != nil { - return err - } + // 关闭响应 + defer resp.Body.Close() + + // 读取响应内容 + buffer, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + + err = bucket.PutObject(yunFileTmpPath, bytes.NewReader(buffer)) + if err != nil { + return err } return nil default: