首页 > 编程语言 >Java下载多个网络文件并打成压缩包

Java下载多个网络文件并打成压缩包

时间:2023-01-10 11:32:45浏览次数:43  
标签:Java java 打成 IOException conn new import logger 压缩包


需求:浏览器访问后台的http地址后,后台将多个网络文件打成压缩包返回给浏览器,用户可以通过浏览器直接下载压缩包。

实现:

根据文件链接把文件下载下来并且转成字节码  ,代码:



package com.zwy.blog.servelt;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class UrlFilesToZip {
// private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class);
//根据文件链接把文件下载下来并且转成字节码
public byte[] getImageFromURL(String urlPath) {
byte[] data = null;
InputStream is = null;
HttpURLConnection conn = null;
try {
URL url = new URL(urlPath);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
// conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(6000);
is = conn.getInputStream();
if (conn.getResponseCode() == 200) {
data = readInputStream(is);
} else {
data = null;
}
} catch (MalformedURLException e) {
// logger.error("MalformedURLException", e);
} catch (IOException e) {
// logger.error("IOException", e);
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
// logger.error("IOException", e);
}
conn.disconnect();
}
return data;
}


public byte[] readInputStream(InputStream is) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = -1;
try {
while ((length = is.read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
baos.flush();
} catch (IOException e) {
// logger.error("IOException", e);
}
byte[] data = baos.toByteArray();
try {
is.close();
baos.close();
} catch (IOException e) {
// logger.error("IOException", e);
}
return data;
}
}



新建DownFileServlet,调用上面的工具类,代码如下:



package com.zwy.blog.servelt;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DownFileServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//String filename = new String("xx.zip".getBytes("UTF-8"), "ISO8859-1");//控制文件名编码
String fileName = URLEncoder.encode("证据材料.zip","UTF-8");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(bos);
UrlFilesToZip s = new UrlFilesToZip();
String urls[]={"https://hr-minio.cas-air.cn/pdf-temp/001d535005784d3d8220e89d5ce4b3ab.pdf","https://hr-minio.cas-air.cn/pdf-temp/001ee146be864a848a04bef6abfb1a89.pdf"};
for (String oneFile : urls) {
String filename=oneFile.substring(oneFile.lastIndexOf("/")+1);
zos.putNextEntry(new ZipEntry(filename));
byte[] bytes = s.getImageFromURL(oneFile);
zos.write(bytes, 0, bytes.length);
zos.closeEntry();
}
zos.close();
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
OutputStream os = response.getOutputStream();
os.write(bos.toByteArray());
os.close();
} catch (FileNotFoundException ex) {
// logger.error("FileNotFoundException", ex);
} catch (Exception ex) {
// logger.error("Exception", ex);
}
}


}



浏览器直接访问DownFileServlet的地址,即可直接下载压缩包。

标签:Java,java,打成,IOException,conn,new,import,logger,压缩包
From: https://blog.51cto.com/dreamboy/5999932

相关文章

  • java socket通信
    1.socket通信模型2.代码示例2.1服务端packagecom.java4all.controller;importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;/***Author:yunqing*......
  • java反射field相关知识
    Classc=ArrayList.class;c.isPrimitive();//判断c是否为基本数据类型c.isAssignableFrom(List.class);//判断c是否是List类的子类或父类c.getGenericType();//......
  • 如何理解Java的一处编译处处运行
    要理解Java的一处编译处处运行这句话,首先需要知道平台的概念;什么是平台 CPU处理器与操作系统的整体叫平台。CPU:每种CPU又有特定的指令集;操作系统:不同的操作系统支......
  • 14个非常棒的 JavaScript 游戏开发框架推荐
     ​​LimeJS​​​​​​这是一个基于HTML5游戏框架,用于快速构建运行于现代触摸屏和桌面浏览器的游戏(需要***访问)。 ​​Impact​​​​​​ 这是一个专业的JavaScript......
  • Java循环运行时暂停一段时间
    GitHub项目地址Gitee项目地址Java在运行for循环时,希望可以每个循环暂停一段时间。使用sleep方法即可:for(inti=0;i<10;i++){try{System.ou......
  • 【项目源码】基于JavaEE的健康管理系统
    随着网络技术的不断发展,网站的开发与运用变得更加广泛。这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台。该网站主要有教师饮食管......
  • [项目源码] JavaWeb校园宿舍管理系统
     jsp校园宿舍管理系统源码,采用Servlet+JSP+MySQL。包含数据库文件,界面采用bootstrap,简洁大方。      项目导入eclipse后的目录结构如下: 关注下面公众号,下载源码原......
  • Java循环运行时暂停一段时间
    GitHub项目地址Gitee项目地址Java在运行for循环时,希望可以每个循环暂停一段时间。使用sleep方法即可:for(inti=0;i<10;i++){try{System.o......
  • java循环结构中局部变量和成员变量
    前言在前两篇文章中,壹哥给大家讲解了Java里的条件分支,包括if和switch两种情况。我们知道,除了条件分支结构,还有循环结构,所以接下来的一个学习重点就是Java里的循环。但在学......
  • java后端解决跨域问题
    一、问题来源最近同事开发一个功能,提供接口给第三方调用,第三方调用时直接前端进行调用的因此触发了跨域拦截,报错如下: 二、解决方法可以要求第三方在自己后端......