文章目录

  • 一、问题的说明以及结论的摆出
  • 二、如何配置文件到swagger进行下载的方法
    • 2.1 从 swagger2 的配置说起
    • 2.2 从响应头开始说起
      • 2.2.1 返回文件的名字以及设置响应体中的流文件
    • 3 整体案例,读取本地的文件送到swagger2中进行下载。
  • 三、打开文件报错的反思,以及最终解决办法
  • 四、最终解决办法,更新swagger版本为 2.9.2 以上
  • 五、写在最后
    • 附录

一、问题的说明以及结论的摆出

swagger下载的地方

无法读取的内容,是否恢复此文档的内容

视图打开时遇到错误

以上的错误,包括txt这种简单格式,或者excel这种格式,都会出现问题的

但是部分是不会出现问题的,比如word的文件,受到被保护的视图的时候,就不会出现问题

如以下文件,就不会出现下载后打开异常的问题


以下是总体流程以及解决办法的说明

二、如何配置文件到swagger进行下载的方法

核心:

  • 其实配置这个还是很简单的,核心就是response.setHeader(“Content-Disposition”, “attachment;filename=”,这个的解释呢,就是

  • Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。(请注意,这是设计导致的;无法使用此功能将文档保存到用户的计算机上,而不向用户询问保存位置。)

  • Content-disposition:以什么格式打开响应体数据(inline默认当前页面打开;attachment;filename=xxx 以附件形式打开响应体,文件下载)

2.1 从 swagger2 的配置说起

在controller层的方法上贴上 @ApiOperation

主要的注解就是 @ApiOperation(value = “将数据库转换为word文档”,produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)

具体来说,就是说明采用流下载 application/octet-stream,其中还有json和表单等。

但是对于swagger来说,produces是不需要进行配置的,会自动进行识别

2.2 从响应头开始说起

这里说的就是第二步了,就是响应体,HttpServletResponse response

    @ApiOperation(value = "将数据库转换为word文档",produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)@RequestMapping(value = "/dbToWord", method = {RequestMethod.GET})public void getWord(DBVO dbvo,HttpServletResponse response) {}

方法注入了HttpServletResponse,对影响体进行设置。

设置的东西,主要是两个,一个是 编码格式,一般设置为 utf-8。另一个设置文件是什么格式的。

response.setCharacterEncoding("utf-8"); //设置编码格式
response.setContentType("application/msword"); //标识为word文档

以上说明,对于我们来说,我们并不需要设置文件是什么格式,如果是文件,统一表示流格式就可以,像我们不知道文件是什么格式,统一设置为:

response.setContentType("application/octet-stream"); 即可

如果一定要设置比较精确的格式,可以参考以下的说明。

Ext MIME Type
.doc application/msword
.dot application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
。。。 。。。

查看更多,请看文尾

2.2.1 返回文件的名字以及设置响应体中的流文件

String fileName = "dbToWord"; //文件名字,设置之后,下载的文件就是按照这个文件名进行设置的
String outFile = "D:/toWord.docx";
try (OutputStream outputStream = response.getOutputStream()) {response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".doc", "utf-8")); //一方面是保证支持中文文件名,另一方面是真正进行名字的设置Files.copy(Paths.get(outFile),outputStream);
} catch (IOException e) {e.printStackTrace();
}

以上就是最核心的代码。

3 整体案例,读取本地的文件送到swagger2中进行下载。

在D盘创建toWord文件

运行结果

下载文件toWordTest.doc文件之后,打开依然会报错。

三、打开文件报错的反思,以及最终解决办法

从上述可以知道,我们对swagger的配置,或者对 响应头的配置,是没有问题的。

为了证明我们没问题,我采用了 postman进行测试,结果是可以打开的

如图

发现postman下载的文件,是可以打开,并且正确显示内容的

基本可以得出结论,是swagger的问题,而不是我们代码的问题

四、最终解决办法,更新swagger版本为 2.9.2 以上

我花了一整天查找问题, 从代码中,以及word文档的格式中,都查找过了,最后,关注了swagger2的版本

我发现目前使用的swagger2版本为 2.6.1.

更新swagger2版本为 2.9.2 之后,我再尝试下载

五、写在最后

swagger2下载文件打开异常,百度了很多网友的方案,基本没有很好的解决方案,我只能自己进行解决。

下载文件之后打开异常,本来就是swagger2本身的问题,我之前一直在纠结代码的问题,反反复复导致自己特别的累,但是换一个角度看,还是收获满满。

大部分的程序员,都是面向百度或者谷歌进行编程的,而网上的资料乱七八糟,有时候找起来让人难受,于是本人无偿进行资料收集的工作,大部分资料都是本人实打实收集的而且测试过,大家不用怀疑准确性,奈何能力有限,免于遗漏,希望读者可以在评论或者私信我,进行改正,大家一起为互联网技术做贡献。


收集资料枯燥无味,如果本文对你有帮助,可以点个赞,这个也是对我最大的鼓励和赞许。

本人行不改名坐不改姓,潮汕的灿灿展

立志在互联网这一行,做出自己的贡献


附录

Ext MIME Type
.doc application/msword
.dot application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
.docm application/vnd.ms-word.document.macroEnabled.12
.dotm application/vnd.ms-word.template.macroEnabled.12
.xls application/vnd.ms-excel
.xlt application/vnd.ms-excel
.xla application/vnd.ms-excel
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
.xlsm application/vnd.ms-excel.sheet.macroEnabled.12
.xltm application/vnd.ms-excel.template.macroEnabled.12
.xlam application/vnd.ms-excel.addin.macroEnabled.12
.xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12
.ppt application/vnd.ms-powerpoint
.pot application/vnd.ms-powerpoint
.pps application/vnd.ms-powerpoint
.ppa application/vnd.ms-powerpoint
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.potx application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
.ppam application/vnd.ms-powerpoint.addin.macroEnabled.12
.pptm application/vnd.ms-powerpoint.presentation.macroEnabled.12
.potm application/vnd.ms-powerpoint.presentation.macroEnabled.12
.ppsm application/vnd.ms-powerpoint.slideshow.macroEnabled.12

swagger2文件下载word或者excel报错或者其他文件格式错误的解决方案相关推荐

  1. 一种word文档报错 error code 800700EA的可能解决方案

    结合自身实际情况的方案,参考者可酌情采用 之前不知道因为啥把系统的区域设置,勾选了图中所示的5中的"Beta版",结果有些word文档就打开之后闪退,有的拷出去之后在别的机器上另保 ...

  2. 使用poi导出excel报错-打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

    使用poi导出excel报错-打开文件报"Excel 已完成文件级验证和修复.此工作簿的某些部分可能已被修复或丢弃" 1.原本正常使用的Excel导出突然下载文件报错 2.定位时发 ...

  3. pandas写excel报错ModuleNotFoundError: No module named ‘xlwt‘

    pandas写excel报错ModuleNotFoundError: No module named 'xlwt' https://blog.csdn.net/weixin_36372879/arti ...

  4. c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决

    c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决 参考文章: (1)c#调用excel报错 (异常来自 HRESULT:0x ...

  5. oracle.sql.clob 报错,oracle11g java导出excel报错oracle.sql.CLOB@xxxx问题

    在项目中遇到,生产导出excel报错的问题 oracle.sql.CLOB@xxxx的错误,测试导出没问题,一样的代码. 原来oracle数据库从10g以后,使用wm_concat,函数返回值会自动转 ...

  6. readxl包导入excel报错Error: `path` does not exist解决方法

    readxl包导入excel报错Error: `path` does not exist解决方法 方法1:File - import dataset - from excel 方法2:检查语法错误 正 ...

  7. PHP 导出Excel 报错:realpath(): open_basedir restriction in effect. File(/tmp) is not within the allowed

    PHP 导出Excel 报错:realpath(): open_basedir restriction in effect. File(/tmp) is not within the allowed  ...

  8. 如何解决word文档报错打不开呢?

    在日常办公中,会经常使用到word文档.有时,在我们的电脑上会不小心将两个不同的文件保存在同一个群集中.这样导致文件是交叉链接的,致使我们经常会收到一个错误提示.此外,由于病毒或数据损坏而误删除文件很 ...

  9. .Net Core通过NPOI在CentOS 7(Docker)环境中导出Excel报错The type initializer for ‘Gdip‘ 的问题

    一.前言 今天在AspNetCore5.0环境中做了一个导出Excel的功能,在开发机器上(windows10)调试正常,但是部署到centos7容器(容器基础环境mcr.microsoft.com/ ...

最新文章

  1. excel甘特图模板_类似这样的甘特图是怎么做的?
  2. Eclipse导入工程后显示小红叉叉怎么解决?
  3. java 编译时找不到同一包中的文件_Java基础笔试练习(七)
  4. 双向链表VS单向链表
  5. python主线程执行_在Django vi中的主线程中执行Python函数
  6. python部分 + 数据库 + 网络编程
  7. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌6.07%
  8. 第一个国产Apache 顶级项目 Kylin,了解一下!| 原力计划
  9. 计算机网络(第七版)谢希仁编著 第四章课后答案详解
  10. 2021.7.28魔鬼训练报告
  11. 网易云易盾手游智能反外挂亮相ChinaJoy2018
  12. 高中教师计算机水平要求,高中信息技术教师考试大纲
  13. 电脑无限重启 服务器,电脑开机无限蓝屏重启怎么办
  14. 梯度向量、Jacobian矩阵、Hessian矩阵
  15. 解决Intellij IDEA 一直在indexing....,导致idea很卡,无法操作
  16. Java线程死锁模拟
  17. 深度学习英文缩写_深度学习相关专业词汇简称汇总
  18. 计算机显示器的三原色是,显示器参数看不懂?看完你就明白啦!
  19. 正则表达式替换某个字符
  20. 一、大数据_课程导论(P2~P6)

热门文章

  1. vue项目结构php写哪里,vuex项目结构目录与配置使用详解
  2. 点在三维平面上的投影
  3. 动态型语言和静态型语言
  4. 你需要改掉的Python开发习惯(四)
  5. 飞信问答(黄金两小时)
  6. 爬虫基础spider 之(一) --- 初识爬虫
  7. python绕过验证码登录_python接口自动化(十三)--cookie绕过验证码登录(详解)...
  8. 12 个 Pandas Numpy 函数:数据分析提速 50% 不是问题!
  9. Colorama 颜色组合测试
  10. 计算如下分段函数 x (x<1) Y=2x-1 (1=<x<10) 3x-1 (x>=10)