这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

/**

* 批量下载为zip

* @param req

* @param response

* @param keyList oss文件路径集合

* @param fileName 下载出来的zip文件名(一般以合同名命名) 如:测试合同,zip

*/

public static void downForZip(HttpServletRequest req, HttpServletResponse response,

List keyList,String fileName ){

// 创建临时文件

File zipFile = null;

try {
        //临时文件名称

zipFile = File.createTempFile("test", ".zip");

FileOutputStream f = new FileOutputStream(zipFile);

/**

* 作用是为任何OutputStream产生校验和

* 第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种)

*/

CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());

// 用于将数据压缩成Zip文件格式

ZipOutputStream zos = new ZipOutputStream(csum);

OSSClient ossClient= OSSUtil.getInstance();

for (String ossFile : keyList) {

// 获取Object,返回结果为OSSObject对象

OSSObject ossObject = ossClient.getObject(OSSUtil.BUCKET, ossFile);

// 读去Object内容 返回

InputStream inputStream = ossObject.getObjectContent();

// 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法,确保压缩包里面文件不同名

String name=ossFile.substring(ossFile.lastIndexOf("/")+1);

zos.putNextEntry(new ZipEntry(name));

int bytesRead = 0;

// 向压缩文件中输出数据

while ((bytesRead = inputStream.read()) != -1) {

zos.write(bytesRead);

}

inputStream.close();

zos.closeEntry(); // 当前文件写完,定位为写入下一条项目

}

zos.close();

String header = req.getHeader("User-Agent").toUpperCase();

if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {

fileName = URLEncoder.encode(fileName, "utf-8");

//IE下载文件名空格变+号问题

fileName = fileName.replace("+", "%20");

} else {

fileName = new String(fileName.getBytes(), "ISO8859-1");

}

response.reset();

response.setContentType("text/plain");

response.setContentType("application/octet-stream; charset=utf-8");

response.setHeader("Location", fileName);

response.setHeader("Cache-Control", "max-age=0");

response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

FileInputStream fis = new FileInputStream(zipFile);

BufferedInputStream buff = new BufferedInputStream(fis);

BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());

byte[] car = new byte[1024];

int l = 0;

while (l < zipFile.length()) {

int j = buff.read(car, 0, 1024);

l += j;

out.write(car, 0, j);

}

// 关闭流

fis.close();

buff.close();

out.close();

ossClient.shutdown();

// 删除临时文件

zipFile.delete();

} catch (IOException e1) {

e1.printStackTrace();

}catch (Exception e) {

e.printStackTrace();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

java oss如何下载文件_Java OSS批量下载并压缩为ZIP代码实例相关推荐

  1. java从url下载文件_Java从URL下载文件

    在这篇文章中将学习如何从java下载URL中的文件.使用java.net.URL openStream()方法从java程序中的URL下载文件.也可以使用Java NIO Channels或Java ...

  2. python批量下载文件-Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  3. python 下载文件-Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  4. python批量下载文件只有1kb_python 批量下载文件

    原博文 2020-05-11 15:04 − 有时候看到好看的视频就想保存到本地,但是有的网站视频都是分段的,先去请求一个文件列表,再按照列表去拼接请求分段视频. 就类似这样:(这是开讲了某期的视频请 ...

  5. java 多线程下载 断点_Java 多线程断点下载文件

    基起原根蒂根基理:哄骗URLConnection获取要下载文件的长度.头部等相干信息,并设置响应的头部信息.并且经由过程URLConnection获取输入流,将文件分成指定的块,每一块零丁开辟一个线程 ...

  6. JAVA 实现返回PDF文件流并进行下载

    JAVA 实现返回PDF文件流并进行下载 首先确保本地存放pdf 保证通过路径可以拿到文件 我这边把pdf放在e盘下的目录 1.前台方法 原生ajax 发送请求返回文件流进行下载 function d ...

  7. Android下载文件(一)下载进度断点续传

    Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...

  8. Lrc歌词批量下载助手 MP3歌词批量下载助手

    Lrc歌词批量下载助手  MP3歌词批量下载助手   易歌词的服务器已经挂掉,各个主流播放器已不提供明确的下载Lrc服务,当上G的MP3文件遇上苦逼的播放器,二缺就诞生了!本软件就是在这种背景下诞生的 ...

  9. 下载网页图片-如何批量下载网页图片-批量图片下载工具免费

    下载网页图片,今天给大家分享一款免费批量下载网页图片软件,支持任意格式的图片批量下载,只需要输入关键词或批量导入网页链接即可下载图片.批量下载任意网页上的图片,每个人都可以拥有各种高清图源.支持批量图 ...

最新文章

  1. linux中普通文件和块设备文件的区别
  2. 原创 | 从席卷全球的“刷脸”乱象,看国内人脸识别立法方向
  3. [小北De编程手记] : Lesson 05 玩转 xUnit.Net 之 从Assert谈UT框架实践
  4. Android okHttp上传图片
  5. 初中生问题:求任意凸多边形的交叉面积
  6. 北斗通信运营商_国内首个“北斗+5G”应用方案发布 配套5G产品将于年底量产上市...
  7. C/C++vsnprintf用法(要配合va_list使用)
  8. linux 清tcp缓存 命令_漫画 | 一台Linux服务器最多能支撑多少个TCP连接?
  9. 重磅!阿里推出国产开源的 JDK!
  10. 微信 JS-SDK 说明文档
  11. 11 综合应用案例 :“搬家具”
  12. 前Google工程师Levandowski跳入优步监狱
  13. python中bool啥意思_python bool是什么意思
  14. Web前端开发十日谈
  15. freeswitch软电话配置、结合讯时网关,外线电话呼入、呼出配置
  16. 获取Excel中sheet页的name,并对不同sheet 页进行处理
  17. 从maven私服(nexus)拉取jar文件,解析项目pom依赖信息
  18. JAVASE高级部分
  19. java IO、NIO、AIO详解
  20. 石英晶振的特点及主要参数

热门文章

  1. [极客大挑战 2019]EasySQL
  2. windows下的终端工具和产品力
  3. 找软件开发开发工作_将求职变成开发项目
  4. java this的用法
  5. go 链路追踪_使用opentracing,jaeger实现golang链路追踪
  6. python3.6串口编程实例_使用python3实现操作串口详解
  7. pygame做的著名游戏_用Python和Pygame写游戏-从入门到放弃(1)
  8. matlab中最接近零的数值
  9. Python实现完全二叉树
  10. Python sys模块的使用