场景:草草写了一个独立的文件服务,可以支持文件的上传和下载操作(常规操作),操作图片的读取mei有问题,但是在下载Excel文件之后,发现提示文件损坏,无法正常打开。

排查:直接从文件服务器上将文件拷贝出来,发现文件能正常打开没有问题。

分析:下载excel在服务器上后缀名称为.xls;但下载下来为.xlsx

观察:文件下载有问题-在代码中没有设置下载文件的contentType和Head

 ----Content-Type:       application/octet-stream  

             这里有content-type的对应标识:https://blog.csdn.net/luman1991/article/details/53423305

该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型
         ----Content-Disposition: attachment;filename=aaa.zip 

当Content-Type 的类型为要下载的类型时 , 这个扩展头会告诉浏览器这个文件的名字和类型。

Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。
注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。(这里摘自博文,自己测试无论位置前后,都能正常下载打开。)

解决:下载文件时设置消息头Content-Type和扩展头Content-Disposition

            java在1.7之后提供了判定下载文件contentType的方法:

可以自动检测文件类型,

            Path path = Paths.get(filePath);contenType = Files.probeContentType(path);System.out.println(contenType);response.setContentType(contenType);

另外,对未知的的文件类型,可以使用

response.setContentType("application/octet-stream;charset=utf-8");

 对Content-Disposition的设置主要根据服务器上带后缀的文件的名称,我这里需求是要跟服务器上文件类型及后缀名称保持一致,所以直接在扩展头写入写入的是全文件名称。

response.setHeader("Content-Disposition", "attachment;fileName=" + path.getFileName());

--over--

Java 下载Excel打不开是什么鬼相关推荐

  1. java下载Excel表格(ajax处理流文件)

    java下载Excel表格(ajax处理流文件) 遇到的问题: ① 导出Excel,处理大量的数据 ② 后端使用Apache POI中的SXSSFWorkbook导出功能,不使用xlsx.core.m ...

  2. java 下载excel问题

    java 下载excel问题 docker 环境下 1.问题表象 2.问题原因 3.解决方法 1.问题表象 java.lang.NullPointerExceptionat sun.awt.FontC ...

  3. Java下载excel模板

    接上篇 -- "下载功能"实现 Excel模板数据导入 参考 上一篇 : Java实现Excel模板导入 正文: 一.接口层: /*** 下载** @param res respo ...

  4. java下载excel导入excel读取excel数据,将数据插入数据库

    10:如果你想导出excel表格,请链接:http://blog.csdn.net/xuanzhangran/article/details/54709221 导入的效果如下: 1:开始页面 2:点击 ...

  5. java导出excel 打不开,poi 通过浏览器导出excel文件打不开

    本机excel版本大于2007 maven引入jar包配置 org.apache.poi poi-ooxml 3.9 dom4j dom4j 代码controller层 MemberSchoolCon ...

  6. Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1.将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行: 2.controller ...

  7. Java下载Excel表名显示波浪号失效

    文章目录 一.SpringBoot 构建 Restful Web 服务 二.使用 POI 生成 Excel 遇到一个需求,需要完成下载Excel表格的功能,表格名包含 "~" 符号 ...

  8. java下载excel实现合并单元格功能

    在下载excel中偶尔会出现需要合并单元格的情况再导出,代码如下: // 1.创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 标题合并单元格设 ...

  9. Java 下载 Excel文件打不开

    public static String downloadFile(HttpServletResponse response, String fileName, String templatePath ...

  10. Java下载Excel兼容性问题

    String fileName = "Excel模板";String userAgent = request.getHeader("USER-AGENT").t ...

最新文章

  1. Linux学习笔记十四周一次课(5月9日)
  2. 检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
  3. selenium教程
  4. python实现多线程的三种方法threading.Thread(模块)的继承实现和函数实现;以及concurrent.futures模块的线程池实现
  5. BugkuCTF-MISC题怀疑人生
  6. Atitit  从 RGB 到 HSL 或 HSV 的转换
  7. 20200927:Java和Cpp中栈与队列的区别
  8. POJ3983 快算24【暴力】
  9. Android 高级学习心得及项目要点
  10. mybatis框架的搭建简单步骤,还有其他的各项配置说明,简单易懂,仅作为个人参考,不作为网络学习借鉴
  11. C/C++中各类数值型数据间的混合运算法则
  12. 安卓项目查手机电量功能_Android手机电池详细信息查看
  13. 数据库索引的作用?什么时候用索引?优缺点?
  14. 丁小平微积分研究成果刍议(转载)
  15. 打开eclipse 运行发现tomcat出问题。如路径找不到 (1)eclipse 运行出现:The archive:C:/tomcat/bin/bootstrap.jar which is refe
  16. 记一次蚂蚁金服面试经历
  17. “玛莎拉蒂狂撞宝马”最新后续:你以为的富养,99%都是错的!
  18. mac 无法访问浏览器
  19. python实践3——利用爬虫爬取“广州各大行业微信群二维码信息”及存入数据到MySQL数据库
  20. java全拼_Java获取汉字对应的拼音(全拼或首字母)

热门文章

  1. 十分钟入门Matplotlib
  2. 性能优化-service进程防杀
  3. 201771010112罗松《面向对象程序设计(java)》第十二周学习总结
  4. matlab灰色预测关联度
  5. Access denied for user ‘‘@‘localhost‘ (using password: YES)报错原因分享
  6. python论坛签到_python简单实现网站打卡签到
  7. 一只青蛙跳向三个台阶_青蛙跳台阶-递归思想解算
  8. amd cpu 安卓模拟器_AMD的CPU如何运行安卓模拟器?
  9. .gitignore详解 copy by 博客园-gt;沙耶
  10. 关于 IE 浏览器打开时速度过慢的问题