java oss如何下载文件_java OSS批量下载,并压缩为ZIP

该博客介绍了一个Java方法,用于从阿里云OSS批量下载文件并将其压缩为ZIP格式。通过创建一个临时ZIP文件,使用CheckedOutputStream和ZipOutputStream将OSS中的文件逐个添加到压缩包中,然后通过HttpServletResponse发送给客户端进行下载。
摘要由CSDN通过智能技术生成

/**

* 批量下载为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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值