代码发布到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文件报文件已损坏解决相关推荐

  1. java response下载docx,报文件损坏是否修复,ContentLength导致的

    使用http response编写附件下载功能,当附件是docx时,用office的word打开,会出现文件损坏,是否修复的错误,点击修复又能正常打开. 首先,仔细对比文件发现,下载下来的文件比服务器 ...

  2. java csv文件tozip后损坏_java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决...

    情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...

  3. php下载docx打不开,使用PHPWord下载DOCX文件时获取损坏的文件 - php

    我正在尝试使用" PHPWord"下载docx文件. 如果我尝试将文件保存到服务器上,则可以正常工作.但是,如果添加标题以下载文件,则文件将以损坏的形式显示. 注意:我正在使用op ...

  4. H5 下载word文件时预览失败,提示无法预览此文件,它可能已损坏,有部分可可以查看预览

    移动端H5下载文件功能时,发现部分word文件可以在线打开 有些无法打开,提示"无法预览此文件,它可能已损坏": 但是在Pc端下载是可以正常打开的,移动端是不行. 代码如下: by ...

  5. Python在Linux,Windows上打开有密doc,docx文件(密码已知)

    Python在Linux,Windows上打开有密doc,docx文件(密码已知) Linux Windows Linux Install: pip install msoffcrypto-tool ...

  6. 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法

    近日为客户调试sql server 2008时意外的然出现两个报错,结果导致部分功能组件无法安装成功 如下 产品: Microsoft SQL Server 2008 联机丛书(简体中文) -- 错误 ...

  7. 文件被损坏 java_使用PDF.JS实现pdf文件在线预览时,报文件被损坏的错误

    首先大概说明一下问题出现的背景:我用PDF.JS实现文件在线预览,参考网上的办法,在jsp文件中使用 ?file=" width="1024" height=" ...

  8. java 下载 docx文件_Java文件下载的几种方式.docx

    Java文件下载的几种方式文章分类:/blogs/category/javaJava编程 Java文件下载的几种方式Java代码 public?HttpServletResponse?download ...

  9. 【axure mac版下载免费版 mac文件已损坏解决】

    第一步:下载axure mac版 1.1 axure下载地址:https://url49.ctfile.com/f/1855249-543653826-d967dc 1.2 选择"普通下载& ...

最新文章

  1. ASP.NET中如何防范SQL注入式攻击
  2. stm32 udp连续发送大量数据_TCP和UDP详解
  3. Confluence 6 下载和安装 MySQL 驱动
  4. python接口自动化接口依赖_Python接口自动化之mock模块简单使用
  5. hdf5文件和csv的区别_使用HDF5文件并创建CSV文件
  6. php 判断ajax访问,PHP里判断是否Ajax请求
  7. vuex页面数据丢失_解决 vuex 中的数据在页面刷新之后就丢失的问题
  8. Java成神之路——JVM垃圾回收概览
  9. Python getattr
  10. ASP.net报错汇总: This application is currently offline.
  11. PDF解决方案(1)--文件上传
  12. 华为模拟器——eNSP安装教程
  13. 惊艳全网的裸眼3D巨屏,竟是一场视觉骗局?
  14. html5火焰字体效果前缀,ps制作火焰字体特效
  15. 计算机桌面壁纸小,电脑的桌面壁纸大小怎么设置
  16. JAVA 短链码生成工具类
  17. Oracle Flashback之Flashback table和flashback drop
  18. 在windows上搭建DZ(Discuz)论坛-部署完成
  19. 嵌入式新闻早班车-第13期
  20. C++ 类Pimpl手法

热门文章

  1. Elemet-UI 中利用穿梭框对表格列进行动态设置
  2. Android 闹钟demo
  3. 记录导出微信聊天记录到硬盘的过程
  4. 苹果A13芯片细节曝光,大幅提升AI性能
  5. 将火狐浏览器默认搜索引擎设置为“百度”
  6. iOS开发 ☞ emoji表情大全
  7. java实现视频文件转换为flv(带文件缩略图)_java实现视频文件转换为flv(带文件缩略图)...
  8. ROS:rosbag play系列指令(详解)
  9. 彩色图像颜色和饱和度调整办法
  10. 殊荣双至,天翼云边缘计算再获两项大奖!