场景描述

使用Springboot实现了一个文件下载的功能,代码如下

String fileName = "template.xls";

res.setHeader("Content-disposition", "attachment;fileName=" + fileName);

res.setContentType("application/vnd.ms-excel;charset=UTF-8");

res.setCharacterEncoding("UTF-8");

File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "excelTemplate/template.xls");

FileInputStream input = new FileInputStream(file);

OutputStream out = res.getOutputStream();

byte[] b = new byte[2048];

int len;

while ((len = input.read(b)) != -1) {

out.write(b, 0, len);

}

input.close();

复制代码

其中被下载文件放在resources下,并且在本地使用IDEA启动进行调试测试的时候,能够成功的将文件下载到本地,并且文件正常打开。

报错信息

本地调试完成,将项目打包成jar包,然后部署到服务器上进行运行,这个时候再次访问下载链接,得到一个损坏的,大小为0kb的文件,查看服务器应用日志,获得以下报错信息;

Template.xls cannot be resolved to absolute file path because it does not reside in the file system.

原因

经过资料查询,发现问题出现在ResourceUtils.getFile()这个方法中,来到这个方法的源码处,找到了打印以上报错信息的位置

if (!"file".equals(resourceUrl.getProtocol())) {

throw new FileNotFoundException(description + " cannot be resolved to absolute file path because it does not reside in the file system: " + resourceUrl);

}

复制代码

可以看得出来,如果当前文件的protocol不是file类型,就会出现这个错误。

文件在调试环境中,是以文件的形式存在的,所以可以使用ResourceUtils.getFile()进行访问,而打包以后的jar包形式,文件的形式不复存在,而是只能以流的方式来读取,

解决方法

ClassPathResource classPathResource = new ClassPathResource("excelTemplate/template.xls");

InputStream input = classPathResource.getInputStream();

复制代码

只需要将ResourceUtils.getFile()方法读取,修改为ClassPathResource读取即可。注意这里的Url不需要添加classpath:前缀。

如若有错,烦请指出

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Springboot实现文件下载,文件下载后损坏]http://www.zyiz.net/tech/detail-135762.html

java文件下载文件损坏_Springboot实现文件下载,文件下载后损坏相关推荐

  1. java 下载文件的文件名乱码_JAVA 文件下载时的文件名乱码解决

    JAVA 文件下载时的文件名乱码解决 if(null != agent && -1 != agent.indexOf("MSIE")){ filename = UR ...

  2. php ftp 下载大文件,文件在用php(ftp)下载后损坏[重复]

    我用下面的代码下载了一个文件.但是,当我试图用winrar打开它来提取gz文件夹中的文件时,我得到了一条消息,即该文件是当前文件. 这是我的代码: $local_file = "wp-con ...

  3. java 下载文件内容为空_java 下载文件 内容为空。

    Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空 SLF4J的全称是Simple Logging Facade for Java,即简单日志门面. SLF4J并不是具体的日 ...

  4. Java 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件)

    Java 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件) **需求** **流程** 1 .调用支付宝接口, 获取zip 下载地址 2.工具类代码 3.目录 4.开发环境 5.更新实际收益到 ...

  5. java下载xlsx文件_Java后台Controller实现文件下载操作

    代码 参数: 1.filePath:文件的绝对路径(d:\download\a.xlsx) 2.fileName(a.xlsx) 3.编码格式(GBK) 4.response.request不介绍了, ...

  6. Springboot + layui + FTP文件上传删除 + HTTP文件下载预览 + pdf.js文件预览(项目实战总结)

    文件管理 0.需求及前言 1.前端,上传按钮嵌入数据表格中 2.利用IIS部署FTP文件服务器 3.后台FTP连接和文件操作 4.FTP遇到的问题和解决方案 5.预览PDF文件V1.0:FTP+临时文 ...

  7. php文件夹重命名,php文件下载并重命名

    1.下载本地文件 $file_url = "./本地路径" $out_filename = '下载后自动保存的名字'; if(!file_exists($file_url)) { ...

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

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

  9. java csv文件tozip后损坏,方法来尝试修复损坏的ZIP文件轻松

    拉链是用于压缩和存储在计算机上的单个或多个文件的一般文件格式.这些文件是节省硬盘空间非常有用,并如传输,收发电子邮件,存储和下载更简单的任务.但是,类似于任何其它压缩文件格式的ZIP文件也容易在腐败和 ...

最新文章

  1. vb6调用python识别训练例子_在vb6中创建的“标准”dll在python中调用时会出现访问冲突...
  2. 体质测试java代码_求java代码,要求做一个测试类,实现以下功能之一。最好三个功能都有。...
  3. 软件测试中性能瓶颈是什么,性能测试中如何定位性能瓶颈
  4. 【IM】关于聚类评价算法的理解
  5. linux permit用法,技术|12 条实用的 zypper 命令范例
  6. 为什么需要ORM 框架
  7. windows睡眠(休眠)唤醒助手_解决电脑在睡眠/休眠状态下无故被唤醒的情况
  8. 软键盘弹起,导致底部被顶上去
  9. 【Linux_Fedora_系统管理系列】_1_用户登录和系统初始配置
  10. excel 公式 平移 引用单元格_不学会这3个Excel隔列求和函数公式,你只能一个个单元格去相加...
  11. Git 仓库配置不当 日产北美公司的源代码遭泄露
  12. Hibernate —— 映射关联关系
  13. shell脚本文件使用教程
  14. 带你学C带你飞 | printf函数 | 变量 | 常量和宏定义 | 数据类型 | 取值范围 | 字符串 | 运算符
  15. 短链接服务架构设计概览
  16. Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 't.statis_date'
  17. Python+Selenium+unittest demo
  18. Windows的使用技巧(一)
  19. python左移位运算_python移位操作困惑
  20. 【Lambda表达式】让你的代码逼范十足~~

热门文章

  1. jquery粘贴按钮_jquery实现复制的两种方式
  2. Prometheus配置和使用Alertmanager发送告警至企业微信
  3. 石大师如何一键重装系统win10
  4. FILETIME 结构
  5. 十道阿里笔试题你能做对几道?
  6. 无需用微信视频电话了!华为手机自带免费通话功能,老机型也支持
  7. 京东手机评论数据挖掘之二:情感分析
  8. linux libgl.so.1,在Deepin系统下安装并打开Steam提示libGL.so.1的解决
  9. 免费全能查词翻译软件网易有道词典 Mac可以做什么
  10. 苹果上网本报价_聚划算疯了,这是要硬刚苹果吗