招摇不明的响应类型;将内容显示为文本

时间:2019-06-06 14:44:17

标签: javascript node.js swagger

我为节点js后端使用swagger-ui-express模块​​构建了一个swagger。 我有一个返回文件的端点(pdf-doc或xlsx)。 当我在摇摇欲坠上测试端点时,它将使我收到200条响应,并始终在正文“无法识别的响应类型;将内容显示为文本。” 这是我不快的端点的代码。

endpoint response image

 "/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"
                    }
                }
            }   
    }



3 个答案:

答案 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将了解响应类型并提供下载文件。

enter image description here

答案 2 :(得分:0)

您可以尝试使用 octet-stream 作为后备。标题应如下所示:

content-disposition: inline; filename=sample.pdf 
content-type: application/octet-stream

``