新增阿里云OSS上传文件逻辑
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user