From cc465d4cee7d00cfbd2b11eb2d0c7688daf529e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Tue, 27 Oct 2026 19:37:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=89=B9=E6=89=B9=E9=99=84=E4=BB=B6?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E8=A1=8Curl=E8=A1=A5/api=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E5=B9=B6=E6=94=B9=E4=B8=BA=E4=BB=85=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 预览失败根因:展示行相对路径缺前端代理前缀/api,浏览器请求落在前端SPA路由返回index.html;实测 /api/blade-transport/hcs/attachment/download 已返回真实文件流;按需求去掉inline内嵌预览逻辑(删除inline参数与pdf分支),固定attachment下载;展示行url改为 /api 前缀路径式文件名 --- .../transport/controller/HcsSyncController.java | 16 ++++++---------- .../impl/PaymentApplicationServiceImpl.java | 7 +++---- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java index 531d9b94..220ce98b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java @@ -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); } /** diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java index 9352a005..8d4066e3 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java @@ -610,11 +610,10 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl 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) {