2024-11-16 02:38:34 +08:00

117 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package oss
import (
_ "catface/bootstrap"
"context"
"fmt"
"github.com/qiniu/go-sdk/v7/storagev2/credentials"
"github.com/qiniu/go-sdk/v7/storagev2/http_client"
"github.com/qiniu/go-sdk/v7/storagev2/objects"
"github.com/qiniu/go-sdk/v7/storagev2/uploader"
"io"
"log"
"os"
"time"
)
// MultiUploadToQiNiu 批量上传文件到七牛云
// images: 文件列表
// 返回值: 文件url列表, 错误信息
func MultiUploadToQiNiu(images []string) ([]string, error) {
// 并发上传图片
errCh := make(chan error, len(images))
// 这里初始化而不扩容切片,因为在循环中会对切片进行赋值,扩容会导致切片地址变化
resImageURLs := make([]string, len(images)) // 保证图片的顺序
for idx, image := range images {
// 闭包捕获循环变量
go func(index int, img string) {
// 打开文件
file, err := os.OpenFile(img, os.O_RDONLY, 0666)
if err != nil {
log.Println(err)
errCh <- err
return
}
defer func(file *os.File) {
err := file.Close()
if err != nil {
log.Println(err)
}
}(file)
imageStr, err := UploadToQiNiu(file)
if err != nil {
log.Println(err)
errCh <- err
return
}
resImageURLs[index] = imageStr
errCh <- nil
}(idx, image)
}
// 等待所有图片上传完成并检查错误
for range images {
if err := <-errCh; err != nil {
return nil, err
}
}
return resImageURLs, nil
}
// UploadToQiNiu 上传文件到七牛云
// reader: 文件流
// 返回值: 文件url, 错误信息
func UploadToQiNiu(reader io.Reader) (string, error) {
accessKey := qiNiuAccessKey
secretKey := qiNiuSecretKey
bucket := qiNiuBucket
mac := credentials.NewCredentials(accessKey, secretKey)
key := fmt.Sprintf("img_%d", time.Now().Unix())
uploadManager := uploader.NewUploadManager(&uploader.UploadManagerOptions{
Options: http_client.Options{
Credentials: mac,
},
})
err := uploadManager.UploadReader(context.Background(), reader, &uploader.ObjectOptions{
BucketName: bucket,
ObjectName: &key,
FileName: key,
}, nil)
if err != nil {
log.Fatal("上传失败可能是key和secret配错了", err)
return "", err
}
return qiNiuDomain + "/" + key, err
}
func DeleteFromQiNiu(key string) error {
accessKey := qiNiuAccessKey
secretKey := qiNiuSecretKey
bucketName := qiNiuBucket
mac := credentials.NewCredentials(accessKey, secretKey)
objectsManager := objects.NewObjectsManager(&objects.ObjectsManagerOptions{
Options: http_client.Options{Credentials: mac},
})
bucket := objectsManager.Bucket(bucketName)
err := bucket.Object(key).Delete().Call(context.Background())
if err != nil {
return err
}
return nil
}