使用FileOutPutStream下载docx文件报文件已损坏解决
代码发布到linux之后,通过接口下载了文件,打开文件提示文件已损坏,但是强行打开却是可以看到内容的,很奇怪。
在网上也找了好多办法,没能解决,最终是在响应头里加入一个Length之后,下载文件打开不报损坏了。
原代码是这样的:
@RequestMapping("/test2")@ResponseBodypublic String test2(HttpServletResponse response) throws Exception {File file = new File("/home/admin/tempfile/bbb.docx");BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));OutputStream os = response.getOutputStream();response.setContentType("application/force-download");setAttachmentResponseHeader(response, "代理协议.docx");int len = 0;byte[] bytes = new byte[1024];while ((len = fis.read(bytes)) > 0) {os.write(bytes, 0, len);}return "ok";}/*** 下载文件名重新编码** @param response 响应对象* @param realFileName 真实文件名* @return*/public void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException {String percentEncodedFileName = percentEncode(realFileName);StringBuilder contentDispositionValue = new StringBuilder();contentDispositionValue.append("attachment; filename=").append(percentEncodedFileName).append(";").append("filename*=").append("utf-8''").append(percentEncodedFileName);response.setHeader("Content-disposition", contentDispositionValue.toString());}/*** 百分号编码工具方法** @param s 需要百分号编码的字符串* @return 百分号编码后的字符串*/private String percentEncode(String s) throws UnsupportedEncodingException {String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());return encode.replaceAll("\\+", "%20");}
然后加入了Length:
response.setContentType("application/force-download");response.setContentLength((int) file.length());
下载之后,打开文件不报损坏了。
使用FileOutPutStream下载docx文件报文件已损坏解决相关推荐
- java response下载docx,报文件损坏是否修复,ContentLength导致的
使用http response编写附件下载功能,当附件是docx时,用office的word打开,会出现文件损坏,是否修复的错误,点击修复又能正常打开. 首先,仔细对比文件发现,下载下来的文件比服务器 ...
- java csv文件tozip后损坏_java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决...
情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...
- php下载docx打不开,使用PHPWord下载DOCX文件时获取损坏的文件 - php
我正在尝试使用" PHPWord"下载docx文件. 如果我尝试将文件保存到服务器上,则可以正常工作.但是,如果添加标题以下载文件,则文件将以损坏的形式显示. 注意:我正在使用op ...
- H5 下载word文件时预览失败,提示无法预览此文件,它可能已损坏,有部分可可以查看预览
移动端H5下载文件功能时,发现部分word文件可以在线打开 有些无法打开,提示"无法预览此文件,它可能已损坏": 但是在Pc端下载是可以正常打开的,移动端是不行. 代码如下: by ...
- Python在Linux,Windows上打开有密doc,docx文件(密码已知)
Python在Linux,Windows上打开有密doc,docx文件(密码已知) Linux Windows Linux Install: pip install msoffcrypto-tool ...
- 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法
近日为客户调试sql server 2008时意外的然出现两个报错,结果导致部分功能组件无法安装成功 如下 产品: Microsoft SQL Server 2008 联机丛书(简体中文) -- 错误 ...
- 文件被损坏 java_使用PDF.JS实现pdf文件在线预览时,报文件被损坏的错误
首先大概说明一下问题出现的背景:我用PDF.JS实现文件在线预览,参考网上的办法,在jsp文件中使用 ?file=" width="1024" height=" ...
- java 下载 docx文件_Java文件下载的几种方式.docx
Java文件下载的几种方式文章分类:/blogs/category/javaJava编程 Java文件下载的几种方式Java代码 public?HttpServletResponse?download ...
- 【axure mac版下载免费版 mac文件已损坏解决】
第一步:下载axure mac版 1.1 axure下载地址:https://url49.ctfile.com/f/1855249-543653826-d967dc 1.2 选择"普通下载& ...
最新文章
- ASP.NET中如何防范SQL注入式攻击
- stm32 udp连续发送大量数据_TCP和UDP详解
- Confluence 6 下载和安装 MySQL 驱动
- python接口自动化接口依赖_Python接口自动化之mock模块简单使用
- hdf5文件和csv的区别_使用HDF5文件并创建CSV文件
- php 判断ajax访问,PHP里判断是否Ajax请求
- vuex页面数据丢失_解决 vuex 中的数据在页面刷新之后就丢失的问题
- Java成神之路——JVM垃圾回收概览
- Python getattr
- ASP.net报错汇总: This application is currently offline.
- PDF解决方案(1)--文件上传
- 华为模拟器——eNSP安装教程
- 惊艳全网的裸眼3D巨屏,竟是一场视觉骗局?
- html5火焰字体效果前缀,ps制作火焰字体特效
- 计算机桌面壁纸小,电脑的桌面壁纸大小怎么设置
- JAVA 短链码生成工具类
- Oracle Flashback之Flashback table和flashback drop
- 在windows上搭建DZ(Discuz)论坛-部署完成
- 嵌入式新闻早班车-第13期
- C++ 类Pimpl手法