根据多个网络url打压缩包批量下载文件---java

该博客介绍如何使用Java编程实现从多个网络URL下载文件并进行压缩打包的方法,涉及核心的文件I/O操作和压缩技术。
@RequestMapping("/toDowmNoteBygid")
	public void toDowmNoteBygid(List<Notes> urls , HttpServletRequest request,HttpServletResponse response, PrintWriter pw) {
   
   
			String gname="下载保存文件名"
			// 响应头的设置
			response.reset();
			response.setCharacterEncoding("utf-8");	
			response.setContentType("multipart/form-data");				
			// 设置压缩包的名字
			// 解决不同浏览器压缩包名字含有中文时乱码的问题
			String downloadName = gname+".zip";
			String agent = request.getHeader("USER-AGENT");
			try {
   
   
				if (agent.contains("MSIE") || agent.contains("Trident")) {
   
   
					downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
				} else {
   
   
					downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");
				}
			} catch (Exception e) {
   
   
				e.printStackTrace();
			}
			response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
			// 设置压缩流:直接写入response,实现边压缩边下载
			ZipOutputStream zipos = null;
			try 
Java中实现多文件下载并打包为ZIP压缩包,可以通过以下步骤完成。核心思路是使用`ZipOutputStream`类将多个文件逐个写入ZIP压缩包中,并通过HTTP响应流将压缩包发送给用户。 ### 实现步骤 1. **定义压缩输出流** 使用`ZipOutputStream`创建ZIP压缩包输出流,将输出流绑定到HTTP响应的输出流上。 2. **遍历文件并添加到压缩包** 对于每一个需要打包的文件,创建对应的`ZipEntry`条目,并将其内容写入压缩包。 3. **流的正确关闭** 确保所有输入流和输出流在操作完成后正确关闭,避免资源泄漏或压缩包损坏。 ### Java代码示例 以下是一个完整的Java方法示例,用于实现多个文件下载并打包为ZIP格式: ```java import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletResponse; public class ZipDownloadUtil { /** * 批量下载文件并打包为ZIP * * @param browsePath 文件存储路径 * @param annexPaths 文件名列表 * @param response HTTP响应对象 * @throws IOException */ public static void doZIP(String browsePath, List<String> annexPaths, HttpServletResponse response) throws IOException { InputStream input = null; // 设置响应头,告知浏览器这是一个ZIP文件下载 response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename=downloaded_files.zip"); // 创建ZIP输出流 ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream()); for (String fileName : annexPaths) { // 拼接完整文件路径 String annexPath = browsePath + fileName; URL url = new URL(annexPath); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); input = connection.getInputStream(); // 提取文件名(去除路径部分) int i = fileName.lastIndexOf("/") + 1; String name = fileName.substring(i); // 创建ZIP条目并写入 ZipEntry zipEntry = new ZipEntry(name); zipOut.putNextEntry(zipEntry); byte[] buffer = new byte[1024]; int len; while ((len = input.read(buffer)) > 0) { zipOut.write(buffer, 0, len); } // 关闭当前文件输入流 input.close(); } // 关闭ZIP输出流 zipOut.closeEntry(); zipOut.close(); } } ``` ### 注意事项 - **流的关闭顺序**:确保`InputStream`在每次文件处理完成后关闭,最后再关闭`ZipOutputStream`。流的关闭顺序必须与打开顺序相反,以避免压缩包损坏。 - **ZIP条目名称**:每个文件在ZIP包中的条目名称应尽量保持简洁,避免路径问题导致解压失败。 - **HTTP响应设置**:设置正确的`Content-Type`和`Content-Disposition`,确保浏览器能正确识别并下载ZIP文件。 ### 流程总结 - 创建`ZipOutputStream`绑定HTTP响应输出流。 - 遍历文件列表,依次将每个文件作为`ZipEntry`写入压缩包- 每个文件写入完成后关闭对应的输入流。 - 所有文件处理完成后关闭压缩包输出流。 该方法适用于Web应用中实现文件批量下载并打包为ZIP的功能,广泛用于文件管理、附件下载等场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值