新增阿里云OSS上传文件逻辑

This commit is contained in:
momo
2023-11-20 17:16:14 +08:00
parent 111e450096
commit e2552f50be
6 changed files with 42 additions and 43 deletions

View File

@@ -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: