java实现阿里OSS对象存储多文件批量zip压缩下载

栏目: Java · 发布时间: 6年前

内容简介:版权声明:本文由 低调小熊猫 发表于 低调小熊猫的博客转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人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压缩下载》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

白话机器学习算法

白话机器学习算法

[新加坡] 黄莉婷、[新加坡] 苏川集 / 武传海 / 人民邮电出版社 / 2019-2 / 49.00元

与使用数学语言或计算机编程语言讲解算法的书不同,本书另辟蹊径,用通俗易懂的人类语言以及大量有趣的示例和插图讲解10多种前沿的机器学习算法。内容涵盖k均值聚类、主成分分析、关联规则、社会网络分析等无监督学习算法,以及回归分析、k最近邻、支持向量机、决策树、随机森林、神经网络等监督学习算法,并概述强化学习算法的思想。任何对机器学习和数据科学怀有好奇心的人都可以通过本书构建知识体系。一起来看看 《白话机器学习算法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码