first commit

This commit is contained in:
Yangtao
2025-11-18 17:48:20 +08:00
commit 6e56cab848
196 changed files with 65809 additions and 0 deletions

View File

@ -0,0 +1,137 @@
package qiniu
import (
"bytes"
"context"
"encoding/base64"
"strings"
"github.com/anxpp/beego"
"github.com/anxpp/beego/logs"
"github.com/qiniu/go-sdk/v7/auth/qbox"
"github.com/qiniu/go-sdk/v7/storage"
"github.com/spf13/viper"
)
func getKey() string {
return viper.GetString("qiniu.key")
}
func getSecret() string {
return viper.GetString("qiniu.secret")
}
// 获取上传图片的token
func GenerateUploadPhotoToken(expireSeconds uint64) (token string) {
bucket := viper.GetString("qiniu.bucket.photo")
putPolicy := storage.PutPolicy{
Scope: bucket,
ReturnBody: `{"key":"$(key)","w": $(imageInfo.width), "h": $(imageInfo.height)}`,
MimeLimit: "image/jpeg;image/png",
}
//有效期
putPolicy.Expires = expireSeconds
mac := qbox.NewMac(getKey(), getSecret())
token = putPolicy.UploadToken(mac)
return
}
// 获取后台上传到七牛的token
func GenerateOperationUploadToken(expireSeconds uint64) (token string) {
bucket := viper.GetString("qiniu.bucket.photo")
putPolicy := storage.PutPolicy{
Scope: bucket,
ReturnBody: `{"key":"$(key)"}`,
MimeLimit: "!application/json;text/plain",
}
// 有效期
putPolicy.Expires = expireSeconds
mac := qbox.NewMac(getKey(), getSecret())
token = putPolicy.UploadToken(mac)
return
}
// 获取上传音频的token
func GenerateUploadAudioToken(expireSeconds uint64) (token string) {
bucket := viper.GetString("qiniu.bucket.media")
saveMp3Entry := base64.URLEncoding.EncodeToString([]byte(bucket + ":$(key).mp3"))
//数据处理指令,支持多个指令
avthumbMp3Fop := "avthumb/mp3/ab/192k|saveas/" + saveMp3Entry
//连接多个操作指令
persistentOps := strings.Join([]string{avthumbMp3Fop}, ";")
pipeline := "FYToMP3Quene"
putPolicy := storage.PutPolicy{
Scope: bucket,
PersistentOps: persistentOps,
PersistentPipeline: pipeline,
PersistentNotifyURL: viper.GetString("open.notify.qiniuMusicConvert"),
}
putPolicy.Expires = expireSeconds
// 转码通知
logs.Info("GenerateUploadAudioToken.notifyUrl: " + viper.GetString("open.notify.qiniuMusicConvert"))
mac := qbox.NewMac(getKey(), getSecret())
upToken := putPolicy.UploadToken(mac)
token = upToken
return
}
// 获取上传视频的token
func GenerateUploadVideoToken(expireSeconds uint64) (token string) {
bucket := viper.GetString("qiniu.bucket.video")
saveMp4Entry := base64.URLEncoding.EncodeToString([]byte(bucket + ":$(key).mp4"))
saveJpgEntry := base64.URLEncoding.EncodeToString([]byte(bucket + ":$(key).jpg"))
//数据处理指令,支持多个指令
avthumbMp4Fop := "avthumb/mp4/vcodec/libx264/s/1280x1280/autoscale/1/avsmart/1/enhance/0|saveas/" + saveMp4Entry
vframeJpgFop := "vframe/jpg/offset/1|saveas/" + saveJpgEntry
//连接多个操作指令
// persistentOps := strings.Join([]string{avthumbMp4Fop, vframeJpgFop}, ";")
persistentOps := strings.Join([]string{avthumbMp4Fop, vframeJpgFop}, ";")
pipeline := "FYVideoToMP4Quene"
putPolicy := storage.PutPolicy{
Scope: bucket,
PersistentOps: persistentOps,
PersistentPipeline: pipeline,
}
putPolicy.Expires = expireSeconds
mac := qbox.NewMac(getKey(), getSecret())
upToken := putPolicy.UploadToken(mac)
token = upToken
return
}
func UploadFile(ctx context.Context, bucket string, fileByte []byte, key string) (fileKey string) {
putPolicy := storage.PutPolicy{
Scope: bucket,
Expires: 600, //10分钟过期
}
mac := qbox.NewMac(getKey(), getSecret())
upToken := putPolicy.UploadToken(mac)
cfg := storage.Config{}
// 空间对应的机房
cfg.Zone = &storage.ZoneHuadong
// 是否使用https域名
cfg.UseHTTPS = false
// 上传是否使用CDN上传加速
cfg.UseCdnDomains = false
// 构建表单上传的对象
formUploader := storage.NewFormUploader(&cfg)
ret := storage.PutRet{}
// 可选配置
putExtra := storage.PutExtra{}
dataLen := int64(len(fileByte))
err := formUploader.Put(ctx, &ret, upToken, key, bytes.NewReader(fileByte), dataLen, &putExtra)
if err != nil {
beego.BeeLogger.Error("上传失败" + err.Error())
fileKey = ""
return
}
//上传成功
fileKey = key
return
}