下面有三个方法都是获取到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)相关推荐

  1. java下载压缩包文件zip

    该案例从数据库查询出来数据,然后打包下载 @RequestMapping("/download")public void download(UCFQRCodeRequestBO q ...

  2. 转pdf wps_华为手机自带图片转PDF的功能?今天才知道,当了5年花粉白当了

    使用了这么久的华为手机,以前需要用到图片转PDF功能的时候都是要打开电脑去转,今天被同事秀了一技,原来我的手机自己就有图片转PDF的功能,真是白用了.下面我们一起来看这个神奇的功能吧! 一.华为图片转 ...

  3. java.util.zip包 OutputStream ZipOutputStream以压缩包的方式导出或下载多个文件,比如图片,文档,Excel表格等

    目录 前言 逻辑流程 代码 请求接口 压缩文件方法 关闭文件流 前言 接到个需求,从数据库查询出多个用户,每个用户都会有头像,以压缩包的方式下载这些用户的头像,这里用到了java.util.zip包下 ...

  4. Java多个文件根据URL下载后打包zip导出

    该示例框架为Spring Boot,根据Url把多个文件下载到指定的文件夹目录,然后再将文件夹目录打包成zip导出,有个简单的导出html页面,点击导出按钮下载zip 所需jar包commons-io ...

  5. java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载

    假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...

  6. vue前端下载——jszip压缩和解压,结合file-saver导出图片zip,每20个图片分一个目录

    使用jszip和file-saver导出图片,并打包为zip: import JSZip from "jszip"; import FileSaver from "fil ...

  7. java批量下载文件为zip包

    批量下载文件为zip包的工具类 package com.meeno.trainsys.util;import javax.servlet.http.HttpServletRequest; import ...

  8. java文件批量下载打包成zip

    1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台. ................ 2 .下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**root ...

  9. java下载zip文件损坏_使用Java下载.zip文件会导致损坏的.zip文件?

    我写了这个方法来下载最新的Selenium Chrome驱动程序,它不起作用.它导致损坏的.zip文件.任何人都可以发现我的错误在哪里?使用Java下载.zip文件会导致损坏的.zip文件? priv ...

最新文章

  1. mysql slave 配置_【mysql5.6】 数据库主从(Master/Slave)配置记录
  2. 软件测试学java,软件测试学习Java的内存模型
  3. 【 Linux 】安装、配置并用 Vim 编写第一个 C 程序
  4. linux的mtd架构分析【转】
  5. BZOJ3209(n的二进制表示中1的个数的乘积)
  6. 验证gpu版pytorch是否可用
  7. day55 linux 基础以及系统优化
  8. 四:Cocos2d-x设计思想
  9. python遍历目录压缩文件夹_zip包含一个档案文件夹,如何使用Python获取存档中每个zip的注释?...
  10. 什么是类Unix系统?
  11. 简单分析minidump
  12. Android实现抖音去水印
  13. Linux 逻辑卷管理器(LVM)
  14. 11月20日 如何在场景开启Debug,自定义AI任务,EQS,创建自己的环境任务,使用Pawn环境检测来检测周围的环境,让AI动作更顺滑(动画混合
  15. 是面试官放水,还是公司太缺人?这都能过,字节跳动原来这么容易进...
  16. java手机震动_Android实现手机震动抖动效果的方法
  17. 思科ASA防火墙:控制防火墙不让访问指定网站
  18. UML ~ Unified Modeling Language ~ 统一建模语言。+ 软件设计原则。
  19. 虚拟机打电话发短信方法
  20. BZOJ 4864: [BeiJing 2017 Wc]神秘物质

热门文章

  1. php 短网址的生成和还原原理
  2. KKB: mybatis缓存
  3. 如何在Unity测试时不自动启动SteamVR
  4. Python人工智能之图片识别,一行代码实现图片文字识别
  5. matlab求节点导纳矩阵,Matlab个节点导纳矩阵形成的程序问题
  6. Integer缓存策略
  7. 批量获取文件名称到excel表格?
  8. 256_在S32DS中修改工程名称
  9. Vue 在图片加载过程中遇到的问题
  10. 在WiFi关闭状态连接已保存网络流程