|
@@ -1,10 +1,15 @@
|
|
|
package task
|
|
package task
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "bufio"
|
|
|
|
|
+ "bytes"
|
|
|
|
|
+ "context"
|
|
|
"crypto/md5"
|
|
"crypto/md5"
|
|
|
"encoding/hex"
|
|
"encoding/hex"
|
|
|
"errors"
|
|
"errors"
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
+ "github.com/qiniu/api.v7/v7/auth/qbox"
|
|
|
|
|
+ "github.com/qiniu/api.v7/v7/storage"
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap"
|
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm"
|
|
|
"io"
|
|
"io"
|
|
@@ -15,8 +20,8 @@ import (
|
|
|
"log-server/model/task/response"
|
|
"log-server/model/task/response"
|
|
|
"log-server/utils"
|
|
"log-server/utils"
|
|
|
"mime/multipart"
|
|
"mime/multipart"
|
|
|
- "os"
|
|
|
|
|
"path"
|
|
"path"
|
|
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
"strings"
|
|
|
"time"
|
|
"time"
|
|
|
)
|
|
)
|
|
@@ -30,7 +35,7 @@ func (e *UploadFileService) Upload(file response.UploadFileResponse) error {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//更改的上传文件函数
|
|
//更改的上传文件函数
|
|
|
-func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string, string, string, error) {
|
|
|
|
|
|
|
+func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader, taskId string) (string, string, string, error) {
|
|
|
// 读取文件后缀
|
|
// 读取文件后缀
|
|
|
ext := path.Ext(file.Filename)
|
|
ext := path.Ext(file.Filename)
|
|
|
// 读取文件名并加密
|
|
// 读取文件名并加密
|
|
@@ -38,24 +43,29 @@ func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string,
|
|
|
name = utils.MD5V([]byte(name))
|
|
name = utils.MD5V([]byte(name))
|
|
|
// 拼接新文件名
|
|
// 拼接新文件名
|
|
|
filename := name + "_" + time.Now().Format("20060102150405") + ext
|
|
filename := name + "_" + time.Now().Format("20060102150405") + ext
|
|
|
|
|
+ key := "shuyou/script/" + taskId + "/" + filename
|
|
|
// 尝试创建此路径
|
|
// 尝试创建此路径
|
|
|
- mkdirErr := os.MkdirAll(global.GVA_CONFIG.Local.ScriptPath, os.ModePerm)
|
|
|
|
|
- if mkdirErr != nil {
|
|
|
|
|
- global.GVA_LOG.Error("function os.MkdirAll() Filed", zap.Any("err", mkdirErr.Error()))
|
|
|
|
|
- return "", "", "", errors.New("function os.MkdirAll() Filed, err:" + mkdirErr.Error())
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //mkdirErr := os.MkdirAll(global.GVA_CONFIG.Local.ScriptPath, os.ModePerm)
|
|
|
|
|
+ //if mkdirErr != nil {
|
|
|
|
|
+ // global.GVA_LOG.Error("function os.MkdirAll() Filed", zap.Any("err", mkdirErr.Error()))
|
|
|
|
|
+ // return "", "", "", errors.New("function os.MkdirAll() Filed, err:" + mkdirErr.Error())
|
|
|
|
|
+ //}
|
|
|
// 拼接路径和文件名
|
|
// 拼接路径和文件名
|
|
|
- p := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
|
|
|
|
|
- filepath := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
|
|
|
|
|
-
|
|
|
|
|
|
|
+ //p := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
|
|
|
|
|
+ //filepath := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
|
|
|
|
|
|
|
|
- f, openError := file.Open() // 读取文件
|
|
|
|
|
|
|
+ uploadErr := e.UploadFileToQiNiu(filename, taskId, file)
|
|
|
|
|
+ if uploadErr != nil {
|
|
|
|
|
+ global.GVA_LOG.Error("function UploadFileToQiNiu Filed", zap.Any("err", uploadErr.Error()))
|
|
|
|
|
+ return "", "", "", errors.New("function UploadFileToQiNiu Filed, err:" + uploadErr.Error())
|
|
|
|
|
+ }
|
|
|
|
|
+ //f, openError := file.Open() // 读取文件
|
|
|
f1, openErr := file.Open() // 读取文件生成MD5值
|
|
f1, openErr := file.Open() // 读取文件生成MD5值
|
|
|
- if openError != nil || openErr != nil {
|
|
|
|
|
- global.GVA_LOG.Error("function file.Open() Filed", zap.Any("err", openError.Error()))
|
|
|
|
|
- return "", "", "", errors.New("function file.Open() Filed, err:" + openError.Error())
|
|
|
|
|
|
|
+ if openErr != nil {
|
|
|
|
|
+ global.GVA_LOG.Error("function file.Open() Filed", zap.Any("err", openErr.Error()))
|
|
|
|
|
+ return "", "", "", errors.New("function file.Open() Filed, err:" + openErr.Error())
|
|
|
}
|
|
}
|
|
|
- defer f.Close() // 创建文件 defer 关闭
|
|
|
|
|
|
|
+ //defer f.Close() // 创建文件 defer 关闭
|
|
|
defer f1.Close()
|
|
defer f1.Close()
|
|
|
//生成md5值
|
|
//生成md5值
|
|
|
md5h := md5.New()
|
|
md5h := md5.New()
|
|
@@ -63,24 +73,72 @@ func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string,
|
|
|
md5String := hex.EncodeToString(md5h.Sum(nil))
|
|
md5String := hex.EncodeToString(md5h.Sum(nil))
|
|
|
|
|
|
|
|
//
|
|
//
|
|
|
- out, createErr := os.Create(p)
|
|
|
|
|
- if createErr != nil {
|
|
|
|
|
- global.GVA_LOG.Error("function os.Create() Filed", zap.Any("err", createErr.Error()))
|
|
|
|
|
|
|
+ //out, createErr := os.Create(p)
|
|
|
|
|
+ //if createErr != nil {
|
|
|
|
|
+ // global.GVA_LOG.Error("function os.Create() Filed", zap.Any("err", createErr.Error()))
|
|
|
|
|
+ //
|
|
|
|
|
+ // return "", "", "", errors.New("function os.Create() Filed, err:" + createErr.Error())
|
|
|
|
|
+ //}
|
|
|
|
|
+ //defer out.Close() // 创建文件 defer 关闭
|
|
|
|
|
|
|
|
- return "", "", "", errors.New("function os.Create() Filed, err:" + createErr.Error())
|
|
|
|
|
- }
|
|
|
|
|
- defer out.Close() // 创建文件 defer 关闭
|
|
|
|
|
|
|
+ //_, copyErr := io.Copy(out, f) // 传输(拷贝)文件
|
|
|
|
|
+ //fmt.Println("拷贝文件")
|
|
|
|
|
+ //if copyErr != nil {
|
|
|
|
|
+ // global.GVA_LOG.Error("function io.Copy() Filed", zap.Any("err", copyErr.Error()))
|
|
|
|
|
+ // return "", "", "", errors.New("function io.Copy() Filed, err:" + copyErr.Error())
|
|
|
|
|
+ //}
|
|
|
|
|
+ return key, filename, md5String, nil
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- _, copyErr := io.Copy(out, f) // 传输(拷贝)文件
|
|
|
|
|
- fmt.Println("拷贝文件")
|
|
|
|
|
- if copyErr != nil {
|
|
|
|
|
- global.GVA_LOG.Error("function io.Copy() Filed", zap.Any("err", copyErr.Error()))
|
|
|
|
|
- return "", "", "", errors.New("function io.Copy() Filed, err:" + copyErr.Error())
|
|
|
|
|
|
|
+func (e *UploadFileService) UploadFileToQiNiu(fileName string, taskId string, file *multipart.FileHeader) ( error) {
|
|
|
|
|
+ accessKey := "B81Gsvry2StqKVE3txS-7v9GBBfqykC9zhebmxnW"
|
|
|
|
|
+ secretKey := "YEZJuYcdeF7vRvzffxpopAVR-jMPZg9pZ-4IKTVW"
|
|
|
|
|
+ mac := qbox.NewMac(accessKey, secretKey)
|
|
|
|
|
+ bucket := "pinaishop"
|
|
|
|
|
+ putPolicy := storage.PutPolicy{
|
|
|
|
|
+ Scope: bucket,
|
|
|
}
|
|
}
|
|
|
- return filepath, filename, md5String, nil
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ key :="shuyou/script/" + taskId + "/" + fileName
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ upToken := putPolicy.UploadToken(mac)
|
|
|
|
|
+ cfg := storage.Config{}
|
|
|
|
|
+ // 空间对应的机房
|
|
|
|
|
+ cfg.Region = &storage.ZoneHuanan
|
|
|
|
|
+ // 是否使用https域名
|
|
|
|
|
+ cfg.UseHTTPS = true
|
|
|
|
|
+ // 上传是否使用CDN上传加速
|
|
|
|
|
+ cfg.UseCdnDomains = false
|
|
|
|
|
+ formUploader := storage.NewFormUploader(&cfg)
|
|
|
|
|
+ ret := storage.PutRet{}
|
|
|
|
|
+ putExtra := storage.PutExtra{
|
|
|
|
|
+ //Params: map[string]string{
|
|
|
|
|
+ // "x:name": "github logo",
|
|
|
|
|
+ //},
|
|
|
|
|
+ }
|
|
|
|
|
+ // Get the file size
|
|
|
|
|
+ fileSize := file.Size
|
|
|
|
|
+ f, openError := file.Open() // 读取文件
|
|
|
|
|
+ if openError != nil {
|
|
|
|
|
+ global.GVA_LOG.Error("function file.Open() Filed", zap.Any("err", openError.Error()))
|
|
|
|
|
+ return errors.New("function file.Open() Filed, err:" + openError.Error())
|
|
|
|
|
+ }
|
|
|
|
|
+ defer f.Close()
|
|
|
|
|
+ // Read the file into a byte slice
|
|
|
|
|
+ bs := make([]byte, fileSize)
|
|
|
|
|
+ _, err := bufio.NewReader(f).Read(bs)
|
|
|
|
|
+ if err != nil && err != io.EOF {
|
|
|
|
|
+ fmt.Println(err)
|
|
|
|
|
+ return errors.New("文件转化成字节数组错误, err:" + err.Error())
|
|
|
|
|
+ }
|
|
|
|
|
+ err = formUploader.Put(context.Background(), &ret, upToken, key, bytes.NewReader(bs), fileSize, &putExtra)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ fmt.Println(err)
|
|
|
|
|
+ return errors.New("上传七牛云错误, err:" + err.Error())
|
|
|
|
|
+ }
|
|
|
|
|
+ fmt.Println(ret.Key, ret.Hash)
|
|
|
|
|
+ return nil
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
//上传文件
|
|
//上传文件
|
|
|
func (e *UploadFileService) UploadFile(taskId int, user string, header *multipart.FileHeader) (file response.UploadFileResponse, err error) {
|
|
func (e *UploadFileService) UploadFile(taskId int, user string, header *multipart.FileHeader) (file response.UploadFileResponse, err error) {
|
|
@@ -90,20 +148,26 @@ func (e *UploadFileService) UploadFile(taskId int, user string, header *multipar
|
|
|
var lastRecord response.UploadFileResponse
|
|
var lastRecord response.UploadFileResponse
|
|
|
var version int
|
|
var version int
|
|
|
//定义下载前缀
|
|
//定义下载前缀
|
|
|
- var prefix string = global.GVA_CONFIG.PrefixUrl.PrefixLocal
|
|
|
|
|
- filePath, key, md5String, uploadErr := e.UploadFileFunc(header)
|
|
|
|
|
- if uploadErr != nil {
|
|
|
|
|
- panic(err)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ var prefix string = "http://cdn.pinaishop.kfzs.com/"
|
|
|
|
|
|
|
|
global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Count(&count)
|
|
global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Count(&count)
|
|
|
if count == 0 {
|
|
if count == 0 {
|
|
|
version = 1
|
|
version = 1
|
|
|
} else {
|
|
} else {
|
|
|
- global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Last(&lastRecord)
|
|
|
|
|
|
|
+ fmt.Println(count)
|
|
|
|
|
+ global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Order("id desc").Limit(1).Find(&lastRecord)
|
|
|
|
|
+ fmt.Println(lastRecord)
|
|
|
version = lastRecord.Version + 1
|
|
version = lastRecord.Version + 1
|
|
|
|
|
+
|
|
|
|
|
+ recordArr := []response.UploadFileResponse{}
|
|
|
|
|
+ global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Find(&recordArr)
|
|
|
|
|
+ fmt.Println(recordArr)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ filePath, key, md5String, uploadErr := e.UploadFileFunc(header,strconv.Itoa(taskId) )
|
|
|
|
|
+ if uploadErr != nil {
|
|
|
|
|
+ panic(err)
|
|
|
|
|
+ }
|
|
|
s := strings.Split(header.Filename, ".")
|
|
s := strings.Split(header.Filename, ".")
|
|
|
f := response.UploadFileResponse{
|
|
f := response.UploadFileResponse{
|
|
|
TaskID: taskId,
|
|
TaskID: taskId,
|
|
@@ -125,7 +189,7 @@ func (e *UploadFileService) DownloadFile(taskId int, md5String string) (info res
|
|
|
//改由存储至数据库的时候拼接前缀
|
|
//改由存储至数据库的时候拼接前缀
|
|
|
//var prefix string = global.GVA_CONFIG.PrefixUrl.PrefixLocal
|
|
//var prefix string = global.GVA_CONFIG.PrefixUrl.PrefixLocal
|
|
|
//数据库中无记录,即不需要更新
|
|
//数据库中无记录,即不需要更新
|
|
|
- err = global.GVA_DB.Table("upload_file").Where("task_id = ? and state = 1", taskId).Last(&file).Error
|
|
|
|
|
|
|
+ err = global.GVA_DB.Table("upload_file").Where("task_id = ? and state = 1", taskId).Order("id desc").Limit(1).Find(&file).Error
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
info = response.DownloadFile{
|
|
info = response.DownloadFile{
|
|
|
Url: "",
|
|
Url: "",
|
|
@@ -184,6 +248,7 @@ func (e *UploadFileService) GetScriptList(script task.GameScriptResponse, info r
|
|
|
orderMap["task_id"] = true
|
|
orderMap["task_id"] = true
|
|
|
orderMap["name"] = true
|
|
orderMap["name"] = true
|
|
|
orderMap["responsible_person"] = true
|
|
orderMap["responsible_person"] = true
|
|
|
|
|
+ orderMap["version"] = true
|
|
|
if orderMap[order] {
|
|
if orderMap[order] {
|
|
|
//合法排序字符
|
|
//合法排序字符
|
|
|
if desc {
|
|
if desc {
|