springMVC之文件下载2

本文介绍了一种改进的大文件下载方案,通过POST请求而非GET请求实现,并提供了JS、JSP及后端Java代码示例。该方案能有效降低内存消耗,适用于大文件下载场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相比之前的下载,这中下载更加普遍,原因如下

1.byte[] body = FileUtils.readFileToByteArray(file);,当文件下载过大时候,占用内存过多

所以选择如下下载,代码如下

1.JS文件

//这种方法不能使用get提交,必须使用post提交

$(".testDownLoad").click(function(){
  $.post($(this).attr("href"));
});

 

2.jsp文件

<a class="testDownLoad" href="springMVC/testDownLoadTwo?fileName=setup_11.4.0.2001s.exe">文件下载2</a></br>

 

3.后台代码

@RequestMapping("/testDownLoadTwo")
public void testDownLoadTwo(@RequestParam("fileName") String fileName,HttpServletResponse response) throws IOException{

  //传进来的是ISO-8859-1,转化成默认字符集
  String fileNames = new String(fileName.getBytes("ISO-8859-1"),"utf-8");
  //1.找到要下载的文件
  File file = new File("G:/"+fileNames);
  Long length = file.length();
  //2.设置返回头
  response.setCharacterEncoding("utf-8");
  response.setHeader("Content-Disposition","attachment;filename="+fileName);//这里必须使用传经来的fileName
  response.setHeader("Content-Length",length+"");
  //3.返回数据
  FileInputStream in = new FileInputStream(file);
  ServletOutputStream out = response.getOutputStream();
  byte[] suffer = new byte[1024];
  while(in.read(suffer)!=-1){
    out.write(suffer);
  }
  out.close();
  in.close();
}

转载于:https://www.cnblogs.com/bkyzdy/p/7858585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值