java 阿里云oss批量下载问题

2019/7/24 16:50:31 人评论 次浏览 分类:学习教程

首先我要说,阿里云的批量下载 确实有点坑 不是说不好使,而是根本就找不到,上网搜也没什么靠谱的,后来一狠心,把多个文件放在zip下载,接下来看实现

	/***
	  	 * 批量下载(zip)
	  	 * @param objectName
	  	 * @param response
	  	 * @throws IOException
	  	 *
	  	 * @author panfei  
	  	 * @date 2019年7月24日
	  	 */
		@RequestMapping("downAllOssFile")
	    @ResponseBody
	    public void downAllOssFile(@RequestParam("fileName") String objectName,HttpServletRequest request, HttpServletResponse response) throws IOException {
	        try {
				String momentFileName = "全部资源下载.zip";
	            // 创建临时文件
	            File zipFile = File.createTempFile("批量下载", ".zip");
	            FileOutputStream f = new FileOutputStream(zipFile);
	            CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());
	            // 用于将数据压缩成Zip文件格式
	            ZipOutputStream zos = new ZipOutputStream(csum);
		  		String[] files = objectName.split(",");
		  		for (String string : files) {
		  			String fName = string.trim();  
	                String eachFileName = fName.substring(fName.lastIndexOf("/")+1);
	                
	                String tmp = fName.substring(0,fName.lastIndexOf("/"));
		  			tmp = tmp.substring(tmp.lastIndexOf("/")+1);
		  			String fileName =tmp+"/"+eachFileName; 
	                
	                OSSObject ossObject =  OSSFactory.build().downloadOssFile(response.getOutputStream(), fileName);
	                InputStream inputStream =ossObject.getObjectContent();
	                zos.putNextEntry(new ZipEntry(eachFileName));
	                int bytesRead;
	                // 向压缩文件中输出数据
	                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")) {
	            	momentFileName = URLEncoder.encode(momentFileName, "utf-8");
	            	momentFileName = momentFileName.replace("+", "%20");    //IE下载文件名空格变+号问题
	            } else {
	            	momentFileName = new String(momentFileName.getBytes(), "ISO8859-1");
	            }
	            response.reset();
	            response.setContentType("text/plain");
	            response.setContentType("application/octet-stream; charset=utf-8");
	            response.setHeader("Location", momentFileName);
	            response.setHeader("Cache-Control", "max-age=0");
	            response.setHeader("Content-Disposition", "attachment; filename=" + momentFileName);
	            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();
	            // 删除临时文件
	            zipFile.delete();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	 
	    }

 

相关资讯

  • 那些我们不愿意承认的事

    很久没有见的老朋友,准确的说应该是很久没有见过的老师,一个比我大两岁的老师,我上初中的时候他从高中回来教我了一年。后来又回去上高中,我上高中的时候他上大学,现在我刚大学毕业他创办了公司。昨日一见依然如故,他还是热爱销售,而我却成了纯粹的技术人员。 看到他…

    2015/6/22 13:12:47

学习教程

共有访客发表了评论 网友评论

验证码: 看不清楚?
    -->