fix: 特批附件展示行url补/api代理前缀并改为仅下载
预览失败根因:展示行相对路径缺前端代理前缀/api,浏览器请求落在前端SPA路由返回index.html;实测 /api/blade-transport/hcs/attachment/download 已返回真实文件流;按需求去掉inline内嵌预览逻辑(删除inline参数与pdf分支),固定attachment下载;展示行url改为 /api 前缀路径式文件名
This commit is contained in:
+6
-10
@@ -264,13 +264,10 @@ public class HcsSyncController {
|
||||
@Operation(summary = "合规附件下载", description = "C103-5 代理:按合规附件ID 下载文件流,name 参数可选用于指定下载文件名,inline=true 时内嵌预览(pdf 浏览器直接打开)")
|
||||
public void downloadAttachment(@Parameter(description = "合规附件ID", required = true) @RequestParam String fdId,
|
||||
@Parameter(description = "下载文件名(可选)") @RequestParam(required = false) String name,
|
||||
@Parameter(description = "内嵌预览(可选,pdf 在线查看)") @RequestParam(required = false) Boolean inline,
|
||||
HttpServletResponse response) throws Exception {
|
||||
String fileName = StringUtil.isBlank(name) ? "hcs-attachment-" + fdId : name;
|
||||
// 内嵌预览:inline + 真实类型浏览器直接打开(pdf 在线查看),默认 attachment 走下载
|
||||
boolean preview = Boolean.TRUE.equals(inline) && fileName.toLowerCase().endsWith(".pdf");
|
||||
response.setContentType(preview ? "application/pdf" : MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
response.setHeader("Content-Disposition", (preview ? "inline" : "attachment") + "; filename*=UTF-8''"
|
||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''"
|
||||
+ URLEncoder.encode(fileName, StandardCharsets.UTF_8).replace("+", "%20"));
|
||||
try (Response hcsResponse = hcsAttachmentSupport.downloadRaw(fdId);
|
||||
InputStream inputStream = hcsResponse.body().asInputStream();
|
||||
@@ -281,17 +278,16 @@ public class HcsSyncController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 合同附件下载(路径式文件名,url 以 .pdf 等后缀结尾):前端附件组件按 url 路径后缀识别可否预览,
|
||||
* query 传 fdId 与 inline;行为与 /attachment/download 完全一致
|
||||
* 合同附件下载(路径式文件名,url 以 .pdf 等后缀结尾):前端附件组件按 url 路径后缀识别附件类型,
|
||||
* query 传 fdId;行为与 /attachment/download 完全一致,强制下载不做内嵌预览
|
||||
*/
|
||||
@GetMapping("/attachment/download/{name}")
|
||||
@ApiOperationSupport(order = 12)
|
||||
@Operation(summary = "合规附件下载(路径式文件名)", description = "C103-5 代理:路径携带文件名(含后缀,前端预览识别用),fdId 必传,inline=true 时内嵌预览")
|
||||
@Operation(summary = "合规附件下载(路径式文件名)", description = "C103-5 代理:路径携带文件名(含后缀,前端附件类型识别用),fdId 必传,文件流 attachment 下载")
|
||||
public void downloadAttachmentWithPath(@Parameter(description = "下载文件名(含后缀)", required = true) @PathVariable String name,
|
||||
@Parameter(description = "合规附件ID", required = true) @RequestParam String fdId,
|
||||
@Parameter(description = "内嵌预览(可选,pdf 在线查看)") @RequestParam(required = false) Boolean inline,
|
||||
HttpServletResponse response) throws Exception {
|
||||
this.downloadAttachment(fdId, name, inline, response);
|
||||
this.downloadAttachment(fdId, name, response);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+3
-4
@@ -610,11 +610,10 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
Map<String, Object> specRow = new LinkedHashMap<>();
|
||||
specRow.put("name", HcsSyncConstant.PAYMENT_SPEC_ATTACH_NAME + ".pdf");
|
||||
specRow.put("attachmentType", HcsSyncConstant.PAYMENT_ATTACH_TYPE_SPEC_RESULT);
|
||||
// 网关按服务名前缀路由(口径同 nacos skip-url);url 路径以 .pdf 结尾供前端预览组件识别后缀,
|
||||
// inline 内嵌预览,浏览器可直接查看/另存
|
||||
specRow.put("url", "/blade-transport/hcs/attachment/download/"
|
||||
// 前端代理前缀 /api(网关服务名路由);url 路径以 .pdf 结尾供前端附件组件识别类型,文件流 attachment 强制下载
|
||||
specRow.put("url", "/api/blade-transport/hcs/attachment/download/"
|
||||
+ URLEncoder.encode(HcsSyncConstant.PAYMENT_SPEC_ATTACH_NAME + ".pdf", StandardCharsets.UTF_8)
|
||||
+ "?fdId=" + vo.getHcsSpecAttachFdId() + "&inline=true");
|
||||
+ "?fdId=" + vo.getHcsSpecAttachFdId());
|
||||
rows.add(specRow);
|
||||
vo.setAttachmentsJson(JsonUtil.toJson(rows));
|
||||
} catch (Exception exception) {
|
||||
|
||||
Reference in New Issue
Block a user