You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swagger中无法下载Content-Type为application/pdf的PDF文件

解决Swagger UI无法正确识别PDF响应并触发下载的问题

问题分析

你遇到的情况是:Express接口返回PDF文件在Postman中正常,但Swagger UI会把二进制内容当成文本显示,报错Unrecognized response type; displaying content as text.;改成application/octet-stream虽能触发下载,但需要手动加后缀。核心问题是Swagger UI对application/pdf类型的响应处理需要更明确的配置,才能识别这是一个带文件名的附件下载。

解决方案

1. 保持Express端的响应头配置不变

继续使用正确的PDF类型和带文件名的Content-Disposition,可额外增加传输编码声明增强兼容性:

res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=download.pdf');
// 可选:明确二进制传输的声明
res.setHeader('Content-Transfer-Encoding', 'binary');
res.send(pdfBuffer); // 替换为你的PDF Buffer数据

2. 调整Swagger的响应配置,明确声明响应头和文件类型

修改Swagger响应配置,增加headers字段明确指定Content-Disposition,让Swagger UI识别这是带文件名的附件:

"responses": {
  "200": {
    "description": "返回PDF格式的下载文件",
    "headers": {
      "Content-Disposition": {
        "description": "指定下载文件的名称",
        "schema": {
          "type": "string",
          "example": "attachment; filename=download.pdf"
        }
      }
    },
    "content": {
      "application/pdf": {
        "schema": {
          "type": "string",
          "format": "binary"
        }
      }
    }
  }
}

3. 旧版Swagger UI兼容方案

如果你的Swagger UI版本较低(如v2.x),对application/pdf支持不足,可在content中同时添加application/octet-stream作为备选,既保留正确的PDF类型声明,又能触发下载按钮:

"content": {
  "application/pdf": {
    "schema": {
      "type": "string",
      "format": "binary"
    }
  },
  "application/octet-stream": {
    "schema": {
      "type": "string",
      "format": "binary"
    }
  }
}

这样配置后,Swagger UI会识别到这是需要下载的二进制文件,同时自动使用download.pdf作为文件名,无需手动添加后缀。

内容的提问来源于stack exchange,提问作者biorubenfs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:22:36