java代码批量下载_java实现批量下载

/**

* 批量下载

* @param response

* @param request

* @param filename 自定义的文件名

* @param url 文件路径

*/

public static int down(HttpServletResponse response,HttpServletRequest request,String filename,String[] url){

/**创建一个临时压缩文件,这里的文件你可以自定义是.rar还是.zip*/

String fileName=encodingFileName(filename);

File file = new File(fileName);

try {

if(!file.exists()){

file.createNewFile();

}

/**要是弹出那个下载的框, 就必须有下边这两项的设置了 */

response.reset();

response.addHeader("Content-Disposition", "attachment; filename="+fileName);

response.setContentType("application/octet-stream");

/**创建文件输出流*/

FileOutputStream fous = new FileOutputStream(file);

/**打包的方法我们会用到ZipOutputStream这样一个输出流,所以这里我们把输出流转换一下*/

ZipOutputStream zipOut = new ZipOutputStream(fous);

/**这个方法可以得到服务器的具体路径*/

String path=request.getSession().getServletContext().getRealPath("/");

/**这个方法接受的就是一个所要打包文件的集合或数组,还有一个ZipOutputStream*/

String dir="upload/";

for(int i=0;i

/**dir服务器的upload文件夹 若有可以不写 */

File files2 = new File(path+dir+url[i].replace("/", "\\"));

File[] files1={files2};

FileUtil.zipFile(files1, zipOut);

}

zipOut.close();

fous.close();

/**接下来的就是往客户端写数据了*/

OutputStream out = response.getOutputStream();

BufferedInputStream bin = new BufferedInputStream(new FileInputStream(file.getPath()));

byte[] buf = new byte[8192];

int len = 0;

/**

* IE: out.write(buf,0,len);下载超出一个文件会出现异常,但是可以正常下载

* ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error

* Firefox :可以正常运行, 目前还没有找到好的解决方法

*/

while ((len = bin.read(buf, 0, 8192)) != -1) {

out.write(buf, 0, len);

}

out.flush();

out.close();

} catch (IOException e) {

/**屏蔽异常信息*/

//e.printStackTrace();

}

return 1;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值