经常遇到选择多个文件进行批量下载的情况,可以先将选择的所有的文件生成一个zip文件,然后再下载,该zip文件,即可实现批量下载,但是在打包过程中,常常也会出现下载过来的zip文件中里面有乱码的文件名,通过使用ant.jar中的org.apache.tools.zip里的ZipOutPutStream为实现编码的设置。
代码如下:
ant包引用
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.6.5</version>
</dependency>
压缩下载的action代码
package demo.action;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import com.opensymphony.xwork2.ActionSupport;
/**
* 批量下载文件:
* 使用ant.jar包中的org.apache.tools.zip.*完成压缩,
* java原生也有java.util.zip.*但是测试了下无法搞定压缩
* 文件内文件名的中文问题
* @author yangcong
*
*/
public class BatchDownloadAction extends ActionSupport {
private Logger Log = Logger.getLogger(BatchDownloadAction.class);
private static final String FilePath = "D:\\";
private static final long serialVersionUID = -8694640030455344419L;
public String execute() {
//生成的ZIP文件名为Demo.zip
String tmpFileName = "Demo.zip";
byte[] buffer = new byte[1024];
String strZipPath = FilePath + tmpFileName;
try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
strZipPath));
// 需要同时下载的两个文件result.txt ,source.txt
File[] file1 = { new File(FilePath+"test1.txt"),
new File(FilePath+"测试2.docx") };
for (int i = 0; i < file1.length; i++) {
FileInputStream fis = new FileInputStream(file1[i]);
out.putNextEntry(new ZipEntry(file1[i].getName()));
//设置压缩文件内的字符编码,不然会变成乱码
out.setEncoding("GBK");
int len;
// 读入需要下载的文件的内容,打包到zip文件
while ((len = fis.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.closeEntry();
fis.close();
}
out.close();
this.downFile(getResponse(), tmpFileName);
} catch (Exception e) {
Log.error("文件下载出错", e);
}
return null;
}
/**
* 获取Response
* @return
*/
private HttpServletResponse getResponse() {
return ServletActionContext.getResponse();
}
/**
* 文件下载
* @param response
* @param str
*/
private void downFile(HttpServletResponse response, String str) {
try {
String path = FilePath + str;
File file = new File(path);
if (file.exists()) {
InputStream ins = new FileInputStream(path);
BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面
OutputStream outs = response.getOutputStream();// 获取文件输出IO流
BufferedOutputStream bouts = new BufferedOutputStream(outs);
response.setContentType("application/x-download");// 设置response内容的类型
response.setHeader(
"Content-disposition",
"attachment;filename="
+ URLEncoder.encode(str, "UTF-8"));// 设置头部信息
int bytesRead = 0;
byte[] buffer = new byte[8192];
// 开始向网络传输文件流
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();// 这里一定要调用flush()方法
ins.close();
bins.close();
outs.close();
bouts.close();
} else {
response.sendRedirect("../error.jsp");
}
} catch (IOException e) {
Log.error("文件下载出错", e);
}
}
}
经过在windows环境下测试通过,使用struts2
分享到:
相关推荐
主要为大家详细介绍了java后台批量下载文件并压缩成zip下载的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
开发中经常遇到客户要求把一堆文件转为压缩文件打包下载,ant包可以实现此功能
java批量下载文件,下载完成后打包到zip文件的代码
阐述了如何在Java中,利用 HTML文档之间的链接关系,使用 Java内置的线程机制、网络通讯库和 Swing HTML解析 器实现基 于Web的图片批量下载。对Web上一些其它资源的批量下栽 。也可采用想类似的方法实现。在面向网络...
批量打包下载pdf文件,多sheet页导出excel
主要为大家详细介绍了java实现批量下载、将多文件打包成zip格式下载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java实现连接登录Ftp,下载Ftp指定文件夹下的所有文件,并解压所有压缩文件,同时支持对指定文件夹进行文件压缩
Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。 public class ZipDemo extends JFrame{ JFileChooser fileChooser; //文件选择器 JList fileList; //待...
Java根据Url把多个文件下载到指定的文件夹目录,然后再将文件夹目录打包成zip导出,包括子目录也可以打包,有个简单的导出html页面,点击导出按钮下载zip。
java:用于把需要下载的文件批量打包成一个压缩包,来实现下载
这段Spring Boot代码展示了如何实现文件的批量下载与压缩。主要功能包括通过HTTP响应将多个文件打包成zip压缩包,并提供给用户一次性下载。以下是代码的主要功能点: 1.文件模拟数据:使用Map模拟了一组文件,其中...
把多个单文件打包下载,可以是多个图片,word、文档等。
主要为大家详细介绍了java利用oss实现下载功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
此demo是用于java HttpURLConnection跨域传送图片文件和图片,模拟火狐浏览器,对zip文件进行解压,对图片进行加logo 水印,缩略等处理。其中系统兼容性需要进一步完善,急需要积分,所以先分享了。 ...
主要介绍了java实现服务器文件打包zip并下载的示例,使用该方法,可以即时打包文件,一边打包一边传输,不使用任何的缓存,让用户零等待,需要的朋友可以参考下
批量打包下载.txt /** * 文件下载 * @param response * @param str */ private void downFile(HttpServletResponse response, String str) { try { //String FilePath = "D:\\"; String FilePath = "\...
Java_批量导出大数据量Excel方法.zip
批量上传文件带进度条批量上传文件带进度条批量上传文件带进度条批量上传文件带进度条
主要介绍了JAVA 根据Url把多文件打包成ZIP下载的相关资料,需要的朋友可以参考下
java ftp工具集,包含批量下载文件,并打包成zip文件。批量拷贝ftp服务器文件,批量上传文件等,包含ftp常规操作。