java实现阿里OSS服务器多文件打包ZIP下载,批量下载
2018-03-28 18:13
2276 查看
阿里oss服务器官方文档只有单文件下载, 断点下载等,但实际应用中不乏需要实现多文件下载的时候,于是网上各种查资料,查出来很多都是只有下载或者只有压缩的,于是自己整合代码,最终实现了多文件打包成ZIP压缩文件下载。
下面直接上代码:
版权声明:本文为原创,转载需标明出处: https://blog.csdn.net/max3215/article/details/79731511
下面直接上代码:
public static HttpServletResponse zipFilesDown(String key,HttpServletRequest request, HttpServletResponse response){ // endpoint以杭州为例,其它region请按实际情况填写 String endpoint = "oss-cn-shanghai.aliyuncs.com"; // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; try { // 初始化 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);; String fileName = "test.zip"; // 创建临时文件 File 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); String[] keylist = key.split(","); for (String ossfile : keylist) { // 获取Object,返回结果为OSSObject对象 OSSObject ossObject = ossClient.getObject(bucket, ossfile); // 读去Object内容 返回 InputStream inputStream = ossObject.getObjectContent(); // 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法,确保压缩包里面文件不同名 zos.putNextEntry(new ZipEntry(ossfile.split("/")[2])); int bytesRead = 0; // 向压缩文件中输出数据 while((bytesRead=inputStream.read())!=-1){ zos.write(bytesRead); } inputStream.close(); zos.closeEntry(); // 当前文件写完,定位为写入下一条项目 } zos.close(); String header = request.getHeader("User-Agent").toUpperCase(); if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) { fileName = URLEncoder.encode(fileName, "utf-8"); fileName = fileName.replace("+", "%20"); //IE下载文件名空格变+号问题 } 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()) { in 8ee8 t j = buff.read(car, 0, 1024); l += j; out.write(car, 0, j); } // 关闭流 fis.close(); buff.close(); out.close(); ossClient.shutdown(); // 删除临时文件 zipFile.deleteOnExit(); } catch (Exception e) { e.printStackTrace(); } return response; }经测算基本可以满足应用需求,细节部分不是很完善,记录备用
版权声明:本文为原创,转载需标明出处: https://blog.csdn.net/max3215/article/details/79731511
相关文章推荐
- 【Java】Java实现批量打包文件Zip下载
- java实现服务器文件打包zip并下载的示例(边打包边下载)
- Java 从服务器上批量打包(zip)下载文件到本地
- java实现文件自动打包成zip并下载…
- Struts2下实现批量下载/打包ZIP下载文件
- [Java Web]服务器获取远程文件并Zip打包给客户端下载
- Java实现文件自动打包成zip并下载的代码
- 实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
- 实现从oss(阿里云)服务器批量下载文件
- Java 实现文件批量文件打包下载
- Java实现文件自动打包成zip并下载的代码
- 【Java】Java批量文件打包下载zip
- 实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
- java实现word下载及打包成zip下载(单个文件、多个文件)
- JAVA中的FtpClient与FTPClient,并实现jsp页面下载ftp服务器上的文件
- java将文件批量打包后并下载
- Java FTP 实现跨服务器文件上传下载
- Java 实现文件上传、下载、打包、文件copy、文件夹copy。
- java实现多文件打包成zip
- Java批量文件打包下载