73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package syncer
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
"time"
|
||
|
||
"xk-hy-transit-go/internal/fileauth"
|
||
"xk-hy-transit-go/internal/hyfile"
|
||
)
|
||
|
||
// UploadTestResult Web 测试上传结果(含本次 §2.3.3 token 分步信息)。
|
||
type UploadTestResult struct {
|
||
FileID string
|
||
Filename string
|
||
Scope string
|
||
Parts fileauth.UploadTokenParts
|
||
}
|
||
|
||
// uploadTokenPartsForUpload 生成 §2.3.3 upload profile token(scope=仅 bucket)。
|
||
func (r *Runner) uploadTokenPartsForUpload() (fileauth.UploadTokenParts, error) {
|
||
r.configMu.RLock()
|
||
key := strings.TrimSpace(r.hyAppKey)
|
||
secret := strings.TrimSpace(r.hyAppSecret)
|
||
bucket := strings.TrimSpace(r.fileBucket)
|
||
r.configMu.RUnlock()
|
||
if key == "" || secret == "" || bucket == "" {
|
||
return fileauth.UploadTokenParts{}, fmt.Errorf("appKey/appSecret/fileBucket 未配置")
|
||
}
|
||
deadline := time.Now().Unix() + 3600
|
||
return fileauth.BuildUploadTokenPartsForUpload(key, secret, bucket, deadline)
|
||
}
|
||
|
||
// UploadTestPDF 刷新配置后上传测试 PDF,返回 fileId 与本次 token 分步信息。
|
||
func (r *Runner) UploadTestPDF(pdf []byte, filename string) (*UploadTestResult, error) {
|
||
if err := r.ReloadCloudConfig(); err != nil {
|
||
return nil, err
|
||
}
|
||
if strings.TrimSpace(filename) == "" {
|
||
filename = "prescription.pdf"
|
||
}
|
||
parts, err := r.uploadTokenPartsForUpload()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
r.configMu.RLock()
|
||
url := r.fileUploadURL
|
||
bucket := strings.TrimSpace(r.fileBucket)
|
||
r.configMu.RUnlock()
|
||
|
||
res := &UploadTestResult{
|
||
Filename: filename,
|
||
Scope: bucket,
|
||
Parts: parts,
|
||
}
|
||
fileID, err := hyfile.UploadPDF(pdf, filename, url, parts.UploadToken, r.cfg.ForwardSharedSecret)
|
||
if err != nil {
|
||
return res, err
|
||
}
|
||
res.FileID = fileID
|
||
return res, nil
|
||
}
|
||
|
||
// uploadTokenForFile 生产上传凭证(scope=仅 bucket)。
|
||
func (r *Runner) uploadTokenForFile(filename string) (string, error) {
|
||
_ = filename
|
||
parts, err := r.uploadTokenPartsForUpload()
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
return parts.UploadToken, nil
|
||
}
|