144 lines
4.5 KiB
Go
144 lines
4.5 KiB
Go
package logic
|
|
|
|
import (
|
|
"chain-dci/pb/dci"
|
|
"chain-dci/pkg/app"
|
|
errCommon "chain-dci/pkg/err"
|
|
"chain-dci/pkg/msg"
|
|
"chain-dci/pkg/utils"
|
|
"encoding/base64"
|
|
"errors"
|
|
"fmt"
|
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
|
"github.com/jinzhu/copier"
|
|
"strings"
|
|
"time"
|
|
"unicode"
|
|
)
|
|
|
|
type IFile interface {
|
|
Upload(request *dci.GetUploadUrlRequest) error
|
|
}
|
|
|
|
type File struct {
|
|
}
|
|
|
|
/*
|
|
存证API
|
|
GetUploadUrl
|
|
获取 访问 oss的链接, 注意 如果文件名为中文 则需要 对文件名使用 utf-8 字符集进行 URL编码上传
|
|
*/
|
|
func GetUploadUrl(req *bccrClient.GetUploadurlRequest) (result *bccrClient.GetUploadurlResponse) {
|
|
|
|
result, err := app.ModuleClients.BccrClient.GetUploadurl(req)
|
|
if err != nil {
|
|
errCommon.NoReturnError(err, "调用 蚂蚁链获取 oss url 错误:")
|
|
return
|
|
}
|
|
errCommon.NoReturnInfo(req, "获取 DCI GetUploadurl 返回结果:")
|
|
return
|
|
}
|
|
|
|
/*
|
|
存证API
|
|
Upload
|
|
上传 实际文件
|
|
*/
|
|
func (f *File) Upload(req *dci.GetUploadUrlRequest) (res *dci.GetUploadUrlResponse, err error) {
|
|
|
|
fmt.Println("+++++++++++++++ GetUploadUrlRequest =================")
|
|
fmt.Printf("GetUploadUrlRequest is : %+v\n", req)
|
|
fmt.Println("+++++++++++++++ GetUploadUrlRequest =================")
|
|
|
|
errCommon.NoReturnInfo(req, "上传文件 参数记录:")
|
|
|
|
/*// 记录 上传的文件
|
|
//nil := app.ModuleClients.DciDB.Begin()
|
|
fileInfo := new(model.FileInfo)
|
|
fileInfo.FileUrl = req.FileName
|
|
_ = dao.CreateFileInfo(nil, fileInfo)*/
|
|
|
|
isChinese := false
|
|
|
|
getUploadUrlRequest := new(bccrClient.GetUploadurlRequest)
|
|
|
|
var fileName string
|
|
// 拆分 文件名 和 文件链接
|
|
fileArr := strings.Split(req.FileName, "/")
|
|
fileName = fileArr[len(fileArr)-1]
|
|
fmt.Println("+++++++++++++++ no encode fileName =================")
|
|
fmt.Println("no encode fileName is :", fileArr[len(fileArr)-1])
|
|
fmt.Println("+++++++++++++++ no encode fileName =================")
|
|
|
|
// 如果文件名包含 中文 则需要对 fileName 进行 utf-8 字符集进行 URL编码
|
|
for _, c := range fileName {
|
|
if unicode.Is(unicode.Scripts["Han"], c) {
|
|
isChinese = true
|
|
}
|
|
}
|
|
|
|
if isChinese {
|
|
fileName = base64.URLEncoding.EncodeToString([]byte(fileName))
|
|
}
|
|
getUploadUrlRequest.SetFileName(fileName)
|
|
|
|
clientToken, err := createToken(time.Now().UnixMilli(), fileName, app.ModuleClients.SfNode.Generate().Base64())
|
|
if err != nil {
|
|
return nil, errCommon.ReturnError(err, msg.ErrCreateClientToken, "创建clientToken 失败: ")
|
|
}
|
|
getUploadUrlRequest.SetClientToken(clientToken)
|
|
fmt.Println("+++++++++++++++ encode fileName =================")
|
|
fmt.Println("encode fileName is :", fileName)
|
|
fmt.Println("+++++++++++++++ encode fileName =================")
|
|
|
|
getUploadUrlResponse := GetUploadUrl(getUploadUrlRequest)
|
|
res = new(dci.GetUploadUrlResponse)
|
|
_ = copier.CopyWithOption(&res, getUploadUrlResponse, copier.Option{DeepCopy: false})
|
|
|
|
fmt.Println("+++++++++++++++ GetUploadUrl =================")
|
|
fmt.Printf("GetUploadUrl is : %+v\n", res)
|
|
fmt.Println("+++++++++++++++ GetUploadUrl =================")
|
|
|
|
fmt.Println("====== =========== =================== 1 ===============")
|
|
if res.ResultCode != "OK" {
|
|
/* fileInfo.ReqMsgId = res.ReqMsgId
|
|
fileInfo.ResultCode = res.ResultCode
|
|
fileInfo.ResultMsg = res.ResultMsg
|
|
fileInfo.Url = res.Url
|
|
fileInfo.FileId = res.FileId
|
|
err = dao.UpdateFileInfo(nil, fileInfo)*/
|
|
errCommon.NoReturnError(errors.New(res.ResultMsg), "获取授权访问OSS链接 错误:")
|
|
return res, nil
|
|
}
|
|
|
|
fmt.Println("====== =========== =================== 2 ===============")
|
|
if res.Url == "" || res.FileId == "" {
|
|
/*fileInfo.ReqMsgId = res.ReqMsgId
|
|
fileInfo.ResultCode = res.ResultCode
|
|
fileInfo.ResultMsg = res.ResultMsg
|
|
fileInfo.Url = res.Url
|
|
fileInfo.FileId = res.FileId
|
|
_ = dao.UpdateFileInfo(nil, fileInfo)*/
|
|
errCommon.NoReturnError(errors.New(res.ResultMsg), "获取授权访问OSS链接 错误:")
|
|
return res, nil
|
|
}
|
|
|
|
fmt.Println("====== =========== =================== 3 ===============")
|
|
code, result := utils.PutFromFileUrlWithStream(res.Url, fileName, req.FileName)
|
|
if code != 200 {
|
|
err = errCommon.ReturnError(errors.New(result), result, "上传文件 错误:")
|
|
//fileInfo.IsUpload = 3 // 上传失败
|
|
} else {
|
|
errCommon.NoReturnInfo(result, "上传文件 最终结果:")
|
|
//fileInfo.IsUpload = 2 // 上传成功
|
|
}
|
|
/*fileInfo.ReqMsgId = res.ReqMsgId
|
|
fileInfo.ResultCode = res.ResultCode
|
|
fileInfo.ResultMsg = res.ResultMsg
|
|
fileInfo.Url = res.Url
|
|
fileInfo.FileId = res.FileId
|
|
_ = dao.UpdateFileInfo(nil, fileInfo)*/
|
|
|
|
return res, err
|
|
}
|