无法在 Swagger 中使用内容类型应用程序/pdf 下载 pdf 文件

问题描述 投票:0回答:1

我有一个使用 Express 完成的端点,我在其中下载 pdf 文件作为缓冲区,设置:

res.setHeader('Content-Type', 'application/pdf')
res.setHeader('Content-Disposition', 'attachment; filename=download.pdf')

使用Postman,一切正常,pdf下载正确。

现在,我正在尝试使用 Swagger 生成文档,并且我想在 swagger 中下载文件,就像我在 postman 中可以做的那样。我写的Swagger json文件如下:

"responses": {
  "200": {
    "description": "it should return a binary",
    "content": {
      "application/pdf": {
        "schema": {
           "type": "string",
           "format": "binary"
        }
      }
    }
  }
...

但是当我执行 swagger 时,发生错误:

Unrecognized response type; displaying content as text.

二进制信息以 swagger 的形式显示: binary file fail to download pdf in swagger

但是当我在express应用程序和swagger文件中将

application/pdf
更改为
application/octet-stream
时,会出现一个下载文件按钮,我可以下载该文件,尽管下载后需要将文件扩展名添加到
.pdf
enter image description here

也许我做错了什么,但我按照swagger文档(返回文件的响应)的说明进行操作,一切看起来都很简单,我开始认为存在某种错误。我在 stackoverflow 上读了几篇相关文章,但没有任何效果。

express pdf openapi swagger-ui
1个回答
0
投票

如果您的 API 服务器使用 CORS,请确保响应包含 Access-Control-Expose-Headers 标头,其值为

Content-Disposition
:

Access-Control-Expose-Headers: Content-Disposition

这将使

Content-Disposition
响应标头对 Swagger UI 实际上可见。

© www.soinside.com 2019 - 2024. All rights reserved.