内容简介:版权声明:本文由 低调小熊猫 发表于 低调小熊猫的博客转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人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 提供的地图压缩方法压缩地图
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Computers and Intractability
M R Garey、D S Johnson / W. H. Freeman / 1979-4-26 / GBP 53.99
This book's introduction features a humorous story of a man with a line of people behind him, who explains to his boss, "I can't find an efficient algorithm, but neither can all these famous people." ......一起来看看 《Computers and Intractability》 这本书的介绍吧!
XML、JSON 在线转换
在线XML、JSON转换工具
UNIX 时间戳转换
UNIX 时间戳转换