java 下载zip处理(zip内容是图片或者pdf)
下面有三个方法都是获取到zip里面的图片的inputStream,因为我只需要后去
目录
1http://xxxxxxxxxxxxxxx/xxxx.zip
2.http://xxxxxxxxxxxxxx/xxxxx 下载是个文件流
3.本地文件获取
两者的区别,第一种的比较慢,第二种比较快
因为第一种的.zip可以直接使用URLConnection来获取到文件
而第二种则需要通过http请求之后获取到文件内容所以比较慢
第一种.zip的下载链接
public static void downloadFile(String urlPath) throws Exception {File file = null;BufferedInputStream bin = null;OutputStream out = null;HttpURLConnection httpURLConnection = null;try {// 统一资源URL url = new URL(urlPath);// 连接类的父类,抽象类URLConnection urlConnection = url.openConnection();// http的连接类httpURLConnection = (HttpURLConnection) urlConnection;httpURLConnection.setDoOutput(true);// http正文内,因此需要设为true, 默认情况下是false;httpURLConnection.setDoInput(true);int responseCode = httpURLConnection.getResponseCode();//查看请求状态System.out.println(responseCode);
// // 设定请求的方法,默认是GET
// httpURLConnection.setRequestMethod("GET");// 设置字符编码httpURLConnection.setRequestProperty("Charset", "UTF-8");// 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。httpURLConnection.connect();// 文件大小int fileLength = httpURLConnection.getContentLength();System.out.println(fileLength);//后面参数要字符编码要设置,不然可能会读不到ZipInputStream zipI=new ZipInputStream(httpURLConnection.getInputStream(),Charset.forName("GBK"));ZipEntry entry;while((entry=zipI.getNextEntry())!=null) {byte[] data = getByte(zipI); // 获取当前条目的字节数组InputStream is = new ByteArrayInputStream(data); //获取到zip内容的InputStream 之后就可以爱干嘛干嘛了FileUtil.filter(is, "pdf");}} catch (Exception e) {// TODO Auto-generated catch block
// throw new CustomException(e.toString()+"文件下载异常,请检查下载链接$$"+urlPath);} finally {if (bin != null) bin.close(); if (out != null) out.close(); }}
获取当前条目的字节数组
private static byte[] getByte(ZipInputStream zipI) {try {ByteArrayOutputStream bout = new ByteArrayOutputStream();byte[] temp = new byte[1024];byte[] buf = null;int length = 0;while ((length = zipI.read(temp, 0, 1024)) != -1) {bout.write(temp, 0, length);}buf = bout.toByteArray();bout.close();return buf;} catch (IOException e) {e.printStackTrace();return null;}
}
//判断文件类型
public static boolean filter(InputStream in,String type) throws IOException {byte[] b = new byte[3];try {in.read(b, 0, b.length);} catch (IOException e) {e.printStackTrace();return false;}String xxx = bytesToHexString(b);logger.error("文件类型++++=="+xxx);xxx = xxx.toUpperCase();if(type.equals(checkType(xxx))) {return true;}return false;}
private static String checkType(String xxxx) {switch (xxxx) {case "FFD8FF": logger.debug("类型是:JPEG" );return "photo";case "89504E":logger.debug("类型是:PNG");return "photo";case "255044": logger.debug("类型是:PDF");return "pdf";default: logger.debug("文件头:"+xxxx);return null;}}
zip内容
程序运行结果
获取到了两个InputStream 都是pdf类型的
非zip后缀的处理方法
需要使用到的是
public static void downloadFile(String urlPath) throws Exception {File file = null;BufferedInputStream bin = null;OutputStream out = null;HttpURLConnection httpURLConnection = null;try {long startTime=System.currentTimeMillis();ZipInputStream zipI=new ZipInputStream(new ByteArrayInputStream(AllRequest.GetStringtobyte(urlPath)),Charset.forName("GBK"));long endTime=System.currentTimeMillis(); System.out.println(endTime-startTime);ZipEntry entry;while((entry=zipI.getNextEntry())!=null) {byte[] data = getByte(zipI); // 获取当前条目的字节数组InputStream is = new ByteArrayInputStream(data);FileUtil.filter(is, "pdf");}} catch (Exception e) {// TODO Auto-generated catch block
// throw new CustomException(e.toString()+"文件下载异常,请检查下载链接$$"+urlPath);} finally {if (bin != null) bin.close(); if (out != null) out.close(); }}
请求获取到byte
public static byte[] GetStringtobyte(String url) {try {CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);httpGet.setHeader("content-type", "application/json");CloseableHttpResponse response = httpClient.execute(httpGet);HttpEntity httpEntity = response.getEntity();byte[] back = EntityUtils.toByteArray(httpEntity);return back;} catch (Exception e) {e.printStackTrace();return null;}}
107s
还有一种是本地文件读取使用FileZip
public static void main(String[] args) throws IOException {ZipInputStream zi=new ZipInputStream(InputStream());ZipFile zipFile = new ZipFile("D:\\AAAAA.zip",Charset.forName("GBK"));Enumeration<? extends ZipEntry> entries = zipFile.entries();while(entries.hasMoreElements()){ZipEntry entry = entries.nextElement();InputStream stream = zipFile.getInputStream(entry);FileUtil.filter(stream, "pdf"); }
}
java 下载zip处理(zip内容是图片或者pdf)相关推荐
- java下载压缩包文件zip
该案例从数据库查询出来数据,然后打包下载 @RequestMapping("/download")public void download(UCFQRCodeRequestBO q ...
- 转pdf wps_华为手机自带图片转PDF的功能?今天才知道,当了5年花粉白当了
使用了这么久的华为手机,以前需要用到图片转PDF功能的时候都是要打开电脑去转,今天被同事秀了一技,原来我的手机自己就有图片转PDF的功能,真是白用了.下面我们一起来看这个神奇的功能吧! 一.华为图片转 ...
- java.util.zip包 OutputStream ZipOutputStream以压缩包的方式导出或下载多个文件,比如图片,文档,Excel表格等
目录 前言 逻辑流程 代码 请求接口 压缩文件方法 关闭文件流 前言 接到个需求,从数据库查询出多个用户,每个用户都会有头像,以压缩包的方式下载这些用户的头像,这里用到了java.util.zip包下 ...
- Java多个文件根据URL下载后打包zip导出
该示例框架为Spring Boot,根据Url把多个文件下载到指定的文件夹目录,然后再将文件夹目录打包成zip导出,有个简单的导出html页面,点击导出按钮下载zip 所需jar包commons-io ...
- java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载
假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...
- vue前端下载——jszip压缩和解压,结合file-saver导出图片zip,每20个图片分一个目录
使用jszip和file-saver导出图片,并打包为zip: import JSZip from "jszip"; import FileSaver from "fil ...
- java批量下载文件为zip包
批量下载文件为zip包的工具类 package com.meeno.trainsys.util;import javax.servlet.http.HttpServletRequest; import ...
- java文件批量下载打包成zip
1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台. ................ 2 .下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**root ...
- java下载zip文件损坏_使用Java下载.zip文件会导致损坏的.zip文件?
我写了这个方法来下载最新的Selenium Chrome驱动程序,它不起作用.它导致损坏的.zip文件.任何人都可以发现我的错误在哪里?使用Java下载.zip文件会导致损坏的.zip文件? priv ...
最新文章
- mysql slave 配置_【mysql5.6】 数据库主从(Master/Slave)配置记录
- 软件测试学java,软件测试学习Java的内存模型
- 【 Linux 】安装、配置并用 Vim 编写第一个 C 程序
- linux的mtd架构分析【转】
- BZOJ3209(n的二进制表示中1的个数的乘积)
- 验证gpu版pytorch是否可用
- day55 linux 基础以及系统优化
- 四:Cocos2d-x设计思想
- python遍历目录压缩文件夹_zip包含一个档案文件夹,如何使用Python获取存档中每个zip的注释?...
- 什么是类Unix系统?
- 简单分析minidump
- Android实现抖音去水印
- Linux 逻辑卷管理器(LVM)
- 11月20日 如何在场景开启Debug,自定义AI任务,EQS,创建自己的环境任务,使用Pawn环境检测来检测周围的环境,让AI动作更顺滑(动画混合
- 是面试官放水,还是公司太缺人?这都能过,字节跳动原来这么容易进...
- java手机震动_Android实现手机震动抖动效果的方法
- 思科ASA防火墙:控制防火墙不让访问指定网站
- UML ~ Unified Modeling Language ~ 统一建模语言。+ 软件设计原则。
- 虚拟机打电话发短信方法
- BZOJ 4864: [BeiJing 2017 Wc]神秘物质