我有一个使用 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.
但是当我在express应用程序和swagger文件中将
application/pdf
更改为application/octet-stream
时,会出现一个下载文件按钮,我可以下载该文件,尽管下载后需要将文件扩展名添加到.pdf
。
也许我做错了什么,但我按照swagger文档(返回文件的响应)的说明进行操作,一切看起来都很简单,我开始认为存在某种错误。我在 stackoverflow 上读了几篇相关文章,但没有任何效果。
如果您的 API 服务器使用 CORS,请确保响应包含 Access-Control-Expose-Headers 标头,其值为
Content-Disposition
:
Access-Control-Expose-Headers: Content-Disposition
这将使
Content-Disposition
响应标头对 Swagger UI 实际上可见。