chain-dci/internal/logic/file.go

107 lines
3.3 KiB
Go
Raw Normal View History

2023-11-23 12:06:14 +00:00
package logic
import (
"chain-dci/pb/dci"
"chain-dci/pkg/app"
errCommon "chain-dci/pkg/err"
2023-11-27 02:06:23 +00:00
"chain-dci/pkg/msg"
2023-11-23 12:06:14 +00:00
"chain-dci/pkg/utils"
"encoding/base64"
2023-12-13 05:16:33 +00:00
"errors"
2023-12-05 07:31:26 +00:00
"fmt"
2023-11-23 12:06:14 +00:00
"github.com/alibabacloud-go/tea/tea"
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
"github.com/jinzhu/copier"
"strings"
2023-11-27 02:03:39 +00:00
"time"
2023-11-23 12:06:14 +00:00
"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
}
return
}
/*
存证API
Upload
上传 实际文件
*/
func (f *File) Upload(req *dci.GetUploadUrlRequest) (res *dci.GetUploadUrlResponse, err error) {
2023-12-13 03:22:44 +00:00
fmt.Println("+++++++++++++++ GetUploadUrlRequest =================")
2023-12-13 03:35:47 +00:00
fmt.Printf("GetUploadUrlRequest is : %+v\n", req)
2023-12-13 03:22:44 +00:00
fmt.Println("+++++++++++++++ GetUploadUrlRequest =================")
2023-11-23 12:06:14 +00:00
isChinese := false
getUploadUrlRequest := new(bccrClient.GetUploadurlRequest)
var fileName string
// 拆分 文件名 和 文件链接
fileArr := strings.Split(req.FileName, "/")
2023-12-05 07:31:26 +00:00
fileName = fileArr[len(fileArr)-1]
2023-12-13 03:22:44 +00:00
fmt.Println("+++++++++++++++ no encode fileName =================")
2023-12-05 07:31:26 +00:00
fmt.Println("no encode fileName is :", fileArr[len(fileArr)-1])
2023-12-13 03:22:44 +00:00
fmt.Println("+++++++++++++++ no encode fileName =================")
2023-11-23 12:06:14 +00:00
// 如果文件名包含 中文 则需要对 fileName 进行 utf-8 字符集进行 URL编码
for _, c := range fileName {
if unicode.Is(unicode.Scripts["Han"], c) {
isChinese = true
}
}
if isChinese {
2023-12-05 07:31:26 +00:00
fileName = base64.URLEncoding.EncodeToString([]byte(fileName))
2023-11-23 12:06:14 +00:00
}
2023-12-05 07:31:26 +00:00
getUploadUrlRequest.SetFileName(fileName)
2023-11-23 12:06:14 +00:00
2023-11-27 02:03:39 +00:00
clientToken, err := createToken(time.Now().UnixMilli(), fileName, app.ModuleClients.SfNode.Generate().Base64())
2023-11-27 02:06:23 +00:00
if err != nil {
return nil, errCommon.ReturnError(err, msg.ErrCreateClientToken, "创建clientToken 失败: ")
}
2023-11-27 02:03:39 +00:00
getUploadUrlRequest.SetClientToken(clientToken)
2023-12-13 03:22:44 +00:00
fmt.Println("+++++++++++++++ encode fileName =================")
2023-12-05 07:31:26 +00:00
fmt.Println("encode fileName is :", fileName)
2023-12-13 03:22:44 +00:00
fmt.Println("+++++++++++++++ encode fileName =================")
2023-11-27 02:03:39 +00:00
2023-11-23 12:06:14 +00:00
getUploadUrlResponse := GetUploadUrl(getUploadUrlRequest)
res = new(dci.GetUploadUrlResponse)
_ = copier.CopyWithOption(&res, getUploadUrlResponse, copier.Option{DeepCopy: true})
2023-12-13 03:35:47 +00:00
fmt.Println("+++++++++++++++ GetUploadUrl =================")
fmt.Printf("GetUploadUrl is : %+v\n", res)
fmt.Println("+++++++++++++++ GetUploadUrl =================")
2023-12-13 05:10:55 +00:00
if tea.ToString(getUploadUrlResponse.ResultCode) != "OK" {
2023-12-13 05:16:33 +00:00
return res, errCommon.ReturnError(errors.New(res.ResultMsg), err.Error(), "获取授权访问OSS链接 错误:")
2023-12-13 05:10:55 +00:00
}
2023-11-23 12:06:14 +00:00
if tea.ToString(getUploadUrlResponse.Url) == "" || tea.ToString(getUploadUrlResponse.FileId) == "" {
2023-12-13 05:16:33 +00:00
return res, errCommon.ReturnError(errors.New(res.ResultMsg), err.Error(), "获取授权访问OSS链接 错误:")
2023-11-23 12:06:14 +00:00
}
code, result := utils.PutFromFileUrlWithStream(tea.ToString(res.Url), fileName, req.FileName)
if code != 200 {
2023-12-13 05:18:21 +00:00
return res, errCommon.ReturnError(errors.New(result), result, "上传文件 错误:")
2023-11-23 12:06:14 +00:00
}
return
}