说明
使用了 Hutool 的文件工具类来获取文件名及下载文件
一、读取本地文件后加入压缩包
public void download(String downloadFilename, String[] urls, HttpServletResponse response) {
// 转换中文否则可能会产生乱码
downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");
// 指明response的返回对象是文件流
response.setContentType("application/octet-stream");
// 设置在下载框默认显示的文件名
response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
// 处理文件列表
for (String url : urls) {
// 获取文件流
InputStream input = new FileInputStream(new File(url));
// 压缩包创建新文件
zos.putNextEntry(new ZipEntry(fileName));
// 写入文件数据
byte[] buffer = new byte[1024];
int r = 0;
while ((r = input.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
input.close();
}
zos.flush();
zos.close();
}
二、下载网络文件后加入压缩包
public void download(String downloadFilename, String[] urls, HttpServletResponse response) {
// 转换中文否则可能会产生乱码
downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");
// 指明response的返回对象是文件流
response.setContentType("application/octet-stream");
// 设置在下载框默认显示的文件名
response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
// 处理文件列表
for (String url : urls) {
// 处理文件名
String fileName = FileNameUtil.getName(url);
// 压缩包创建新文件
zos.putNextEntry(new ZipEntry(fileName));
// 下载文件并写入
HttpUtil.download(filePath, zos, false);
}
zos.flush();
zos.close();
}