import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.net.URLEncoder;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public void downloadFilesToZip(HttpServletResponse response) {
String[] fileNames = new String[]{"1.jpg", "2.png", "3.xlsx"};
// 创建一个字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
// 创建一个ZipOutputStream对象,将其关联到字节数组输出流
ZipOutputStream zipOut = new ZipOutputStream(baos);
// 遍历文件列表,逐个将文件压缩到zip文件中
for (String fileName : fileNames) {
if (StrUtil.isNotEmpty(fileName)) {
String[] split = fileName.split("\\.");
// 创建一个输入流来读取文件内容
InputStream fis = xxx;
// 创建一个ZipEntry对象,表示压缩文件的条目
ZipEntry zipEntry = new ZipEntry("附件." + split[1]);
// 将该条目添加到ZipOutputStream中
zipOut.putNextEntry(zipEntry);
// 从输入流读取文件内容,并写入ZipOutputStream中
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zipOut.write(buffer, 0, len);
}
// 关闭输入流
fis.close();
// 关闭当前条目
zipOut.closeEntry();
}
}
// 关闭ZipOutputStream
zipOut.close();
// 将压缩后的字节数组转换为可下载的文件
byte[] zipBytes = baos.toByteArray();
String zipFileName = "附件.zip";
//解决输出乱码问题
String zipFileNameNew = URLEncoder.encode(zipFileName, "UTF-8");
// 设置响应的内容类型为zip文件
response.setHeader("Content-disposition", "attachment;filename=\"" + zipFileNameNew + "\"");
response.setContentType("application/zip; charset=UTF-8");
// 将压缩包的字节数组写入到响应输出流
response.getOutputStream().write(zipBytes);
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
}
java根据以逗号分割的文件名字符串下载文件并以zip格式输出
于 2024-04-30 10:42:52 首次发布