我为节点js后端使用swagger-ui-express模块构建了一个swagger。 我有一个返回文件的端点(pdf-doc或xlsx)。 当我在摇摇欲坠上测试端点时,它将使我收到200条响应,并始终在正文“无法识别的响应类型;将内容显示为文本。” 这是我不快的端点的代码。
"/reports?typeDoc={typeDoc}&file={file}": {
"get": {
"tags": [
"Generate report"
],
"description": "",
"operationId": "",
"parameters": [
{
"name": "typeDoc",
"in": "path",
"description": "type of document",
"required": true,
"type": "string"
},
{
"name": "file",
"in": "path",
"description": "name of the file",
"required": true,
"type": "string"
}
],
"responses": {
"200":{
"description": "Report generated succefully. ",
"content":{
"application/octet-stream":{
"schema":{
"type": "string",
"format": "binary"}
}
}
},
"500": {
"description": "Error in zip file structure or typeDoc"
}
}
}
}
答案 0 :(得分:4)
Swagger UI为此具有open issue。解决方法是添加标头(可以省略“ filename”指令)
content-disposition: attachment; filename="<some file name>"
然后Swagger用户界面将为响应正文提供“下载文件”链接。
注意:应该将内容类型标头设置为响应的实际内容类型(浏览器在打开下载链接时会对其进行解释);通常,响应的内容类型不应为另一个答案所建议的“多部分/表单”。
答案 1 :(得分:0)
尝试添加标题,例如
content-disposition: attachment; filename = test.xlsx
content-type: multipart / form-data
和swagger-ui将了解响应类型并提供下载文件。
答案 2 :(得分:0)
您可以尝试使用 octet-stream
作为后备。标题应如下所示:
content-disposition: inline; filename=sample.pdf
content-type: application/octet-stream
``