2026-05-28 16:39:51 +08:00
|
|
|
|
package syncer
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"strings"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
|
|
"xk-hy-transit-go/internal/fileauth"
|
|
|
|
|
|
"xk-hy-transit-go/internal/hyfile"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2026-05-28 17:03:08 +08:00
|
|
|
|
// UploadTestResult Web 测试上传结果(含本次 FileAuth.java token 分步信息)。
|
2026-05-28 16:39:51 +08:00
|
|
|
|
type UploadTestResult struct {
|
|
|
|
|
|
FileID string
|
|
|
|
|
|
Filename string
|
|
|
|
|
|
Scope string
|
|
|
|
|
|
Parts fileauth.UploadTokenParts
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-05-28 17:03:08 +08:00
|
|
|
|
// uploadTokenPartsForUpload 生成 FileAuth.java upload profile token(scope=仅 bucket)。
|
2026-05-28 16:39:51 +08:00
|
|
|
|
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
|
|
|
|
|
|
}
|