内容简介:版权声明:本文由 低调小熊猫 发表于 低调小熊猫的博客转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032文章链接:
版权声明:本文由 低调小熊猫 发表于 低调小熊猫的博客
转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032
文章链接: https://aodeng.cc/archives/javaosszipdown
简介
阿里oss对象存储官方文档我看了,但是真实开发,还不能满足需求,阿里文件下载路径只能写死,下载文件也只能单个下载,所以自己整理了一些代码,下载时可以自己选择保存的路径,可以实现多个文件同时下载,不吹逼了,反正很厉害就是了,话不多说,上代码
代码
1.自己封装的 工具 包的代码
https://aodeng.cc/archives/ossutil
2.页面发送请求的代码
<td> <a class="btn btn-mini btn-danger" style="width: 88px;height:30px;margin-top: -25px" href="${pageContext.request.contextPath}/pproject/ossdownfile?projectId=${projectId}"> 下载 </a> </td>
3.功能实现的代码
/** * oss文件下载 */ @RequestMapping("/ossdownfile") public void ossdownfile(HttpServletRequest request,HttpServletResponse response,@RequestParam(value="projectId",required=false) long projectId) throws Exception{ try { //-----------------------批量下载文件------------------------// //获取文件名称 String Name=pprojectService.findOne(projectId).getCheckFileName(); //模拟文件 String fileName = request.getSession().getServletContext().getRealPath("tmp/check/")+"/"+projectId+"/"+Name; // 创建临时文件 File zipFile = File.createTempFile("temp", ".zip"); FileOutputStream fps = new FileOutputStream(zipFile); CheckedOutputStream csum = new CheckedOutputStream(fps, new Adler32());//注释一下Adler32(较快)和CRC32两种 // 用于将数据压缩成Zip文件格式 ZipOutputStream zos = new ZipOutputStream(csum); //获取文件的name并拼接成key,下载文件 File f = new File(PathUtil.getRealPath()+"\\tmp\\files\\"+projectId); if(f.exists()){ File[] fs = f.listFiles(); if(null!=fs){ for(File file0:fs){ //善意的提醒一下,key不能以任何形式的斜杠开头 InputStream inputStream = ossUtil.getObjectForInputStream("files/"+projectId+"/"+file0.getName()).getObjectContent(); zos.putNextEntry(new ZipEntry(file0.getName()));//确保压缩包里面文件不同名 int bytesRead = 0; // 向压缩文件中输出数据 while((bytesRead=inputStream.read())!=-1){ zos.write(bytesRead); } inputStream.close(); zos.closeEntry(); } } } zos.close(); //转码,免得文件名中文乱码 Name = URLEncoder.encode(Name,"UTF-8"); //设置文件下载头 response.addHeader("Content-Disposition", "attachment;filename=" + Name); //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 response.setContentType("application/octet-stream"); //写入文件 FileInputStream fis = new FileInputStream(zipFile); BufferedInputStream buff = new BufferedInputStream(fis); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); //通知浏览器以附件形式下载 response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(Name,"utf-8")); 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); } if(out!=null){ out.flush(); out.close(); } ossUtil.clientShutdown(); // 删除文件 zipFile.delete(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
以上所述就是小编给大家介绍的《java实现阿里OSS对象存储多文件批量zip压缩下载》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- golang压缩和解压缩zip文件
- bitcoin:压缩公钥与未压缩公钥
- 一句话轻松实现压缩图片和文件压缩
- 基于Node.js实现压缩和解压缩的方法
- 一种 JNI 方法实现图片压缩,压缩率极高
- Java - 调用 echarts 提供的地图压缩方法压缩地图
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
XML、JSON 在线转换
在线XML、JSON转换工具
HEX CMYK 转换工具
HEX CMYK 互转工具