swagger2文件下载word或者excel报错或者其他文件格式错误的解决方案
文章目录
- 一、问题的说明以及结论的摆出
- 二、如何配置文件到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报错或者其他文件格式错误的解决方案相关推荐
- 一种word文档报错 error code 800700EA的可能解决方案
结合自身实际情况的方案,参考者可酌情采用 之前不知道因为啥把系统的区域设置,勾选了图中所示的5中的"Beta版",结果有些word文档就打开之后闪退,有的拷出去之后在别的机器上另保 ...
- 使用poi导出excel报错-打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
使用poi导出excel报错-打开文件报"Excel 已完成文件级验证和修复.此工作簿的某些部分可能已被修复或丢弃" 1.原本正常使用的Excel导出突然下载文件报错 2.定位时发 ...
- pandas写excel报错ModuleNotFoundError: No module named ‘xlwt‘
pandas写excel报错ModuleNotFoundError: No module named 'xlwt' https://blog.csdn.net/weixin_36372879/arti ...
- c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决
c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决 参考文章: (1)c#调用excel报错 (异常来自 HRESULT:0x ...
- oracle.sql.clob 报错,oracle11g java导出excel报错oracle.sql.CLOB@xxxx问题
在项目中遇到,生产导出excel报错的问题 oracle.sql.CLOB@xxxx的错误,测试导出没问题,一样的代码. 原来oracle数据库从10g以后,使用wm_concat,函数返回值会自动转 ...
- readxl包导入excel报错Error: `path` does not exist解决方法
readxl包导入excel报错Error: `path` does not exist解决方法 方法1:File - import dataset - from excel 方法2:检查语法错误 正 ...
- 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 ...
- 如何解决word文档报错打不开呢?
在日常办公中,会经常使用到word文档.有时,在我们的电脑上会不小心将两个不同的文件保存在同一个群集中.这样导致文件是交叉链接的,致使我们经常会收到一个错误提示.此外,由于病毒或数据损坏而误删除文件很 ...
- .Net Core通过NPOI在CentOS 7(Docker)环境中导出Excel报错The type initializer for ‘Gdip‘ 的问题
一.前言 今天在AspNetCore5.0环境中做了一个导出Excel的功能,在开发机器上(windows10)调试正常,但是部署到centos7容器(容器基础环境mcr.microsoft.com/ ...
最新文章
- excel甘特图模板_类似这样的甘特图是怎么做的?
- Eclipse导入工程后显示小红叉叉怎么解决?
- java 编译时找不到同一包中的文件_Java基础笔试练习(七)
- 双向链表VS单向链表
- python主线程执行_在Django vi中的主线程中执行Python函数
- python部分 + 数据库 + 网络编程
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌6.07%
- 第一个国产Apache 顶级项目 Kylin,了解一下!| 原力计划
- 计算机网络(第七版)谢希仁编著 第四章课后答案详解
- 2021.7.28魔鬼训练报告
- 网易云易盾手游智能反外挂亮相ChinaJoy2018
- 高中教师计算机水平要求,高中信息技术教师考试大纲
- 电脑无限重启 服务器,电脑开机无限蓝屏重启怎么办
- 梯度向量、Jacobian矩阵、Hessian矩阵
- 解决Intellij IDEA 一直在indexing....,导致idea很卡,无法操作
- Java线程死锁模拟
- 深度学习英文缩写_深度学习相关专业词汇简称汇总
- 计算机显示器的三原色是,显示器参数看不懂?看完你就明白啦!
- 正则表达式替换某个字符
- 一、大数据_课程导论(P2~P6)
热门文章
- vue项目结构php写哪里,vuex项目结构目录与配置使用详解
- 点在三维平面上的投影
- 动态型语言和静态型语言
- 你需要改掉的Python开发习惯(四)
- 飞信问答(黄金两小时)
- 爬虫基础spider 之(一) --- 初识爬虫
- python绕过验证码登录_python接口自动化(十三)--cookie绕过验证码登录(详解)...
- 12 个 Pandas Numpy 函数:数据分析提速 50% 不是问题!
- Colorama 颜色组合测试
- 计算如下分段函数 x (x<1) Y=2x-1 (1=<x<10) 3x-1 (x>=10)