IOUtils下载文件,超过8K左右下载失败。

IOUtils下载文件,超过8K左右下载失败。

遇到一个巨坑,通过IOUtils下载日志,每次只要超过25条日志就下载不了,
测试发现在文件大于8K的时候,谷歌浏览器点击下载时不会出现下载对话框,而是打开网页乱码:
在这里插入图片描述
原本代码:

InputStream is = new FileInputStream("c:\\abc.xlsx");
org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=abc.xlsx");

解决代码:

把这两行放在前面:

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=abc.xlsx");
然后再是下面两行:

InputStream is = new FileInputStream("c:\\abc.xlsx");
org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());
这样就能正常下载文件了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IOUtils 是 Apache Commons IO 库提供的一个工具类,可以用于简化文件操作。它提供了一个方便的方法来下载文件。以下是使用 IOUtils 下载文件的示例代码: ```java import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.http.HttpServletResponse; public class FileDownloadUtil { public static void downloadFile(HttpServletResponse response, String filePath, String fileName) throws IOException { File file = new File(filePath); if (file.exists()) { // 设置响应头,告诉浏览器要下载文件 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); // 创建输入流读取文件内容 FileInputStream inStream = new FileInputStream(file); // 获取输出流 OutputStream outStream = response.getOutputStream(); // 使用 IOUtils 将输入流中的内容复制到输出流中 IOUtils.copy(inStream, outStream); // 关闭输入流和输出流 inStream.close(); outStream.close(); } else { // 文件不存在,返回404错误 response.sendError(HttpServletResponse.SC_NOT_FOUND); } } } ``` 在这个示例中,你需要将 `filePath` 替换为要下载文件的实际路径,将 `fileName` 替换为要下载时显示的文件名。`IOUtils.copy()` 方法将输入流中的内容复制到输出流中,从而实现文件下载。记得导入 Apache Commons IO 的库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值