package syncer import ( "fmt" "strings" "time" "xk-hy-transit-go/internal/fileauth" "xk-hy-transit-go/internal/hyfile" ) // UploadTestResult Web 测试上传结果(含本次 FileAuth.java token 分步信息)。 type UploadTestResult struct { FileID string Filename string Scope string Parts fileauth.UploadTokenParts } // uploadTokenPartsForUpload 生成 FileAuth.java 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 }