java 下载zip文件_Java以压缩包方式下载文件
从云服务器上下载文件,以压缩包方式下载
以下载多个文件为例,需要导入zip4j的jar包,版本不要太高
public void downloadZip(List list, HttpServletRequest request, HttpServletResponse response) {
String zipFileName = "";
File[] tempList = null;
//因为我这边在classpath下无法获取到新建文件夹,所以使用路径拼接
String path = this.getClass().getClassLoader().getResource("template/").getPath();
path += "tempPack";
File outFile = new File(path);
for (fielEntiry file : list) {
String url = file.getUrl();//云服务器文件链接
String fileName = assc.getFileName();
if (!outFile.exists()) {
outFile.mkdirs();
}
try {
download(url, path, fileName);
} catch (Exception e) {
e.printStackTrace();
}
}
zipFileName = "/报告.zip";
tempList = outFile.listFiles();
createZipFile(path, zipFileName, tempList);
for (File file : outFile.listFiles()) {
download(file, request, response);
}
} else {
throw new BadRequestException("暂无报告附件");
}
}
}
*下载文件到临时文件夹
public void download(String urlPath, String targetDirectory, String fileName) throws Exception {
URL url = new URL(urlPath);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
InputStream inputStream = http.getInputStream();
byte[] buff = new byte[1024 * 10];
OutputStream out = new FileOutputStream(new File(targetDirectory, fileName));
int lenth = -1;
while ((lenth = inputStream.read(buff)) != -1) {
out.write(buff, 0, len);
out.flush();
}
// 关闭资源
out.close();
inputStream.close();
http.disconnect();
}
*将文件打包成zip文件
public static ZipFile createZipFile(String templatePathZip, String fileName, File... files) {
try { // 创建zip包,指定路径和名称
final ZipFile zipFile = new ZipFile(templatePathZip + fileName);
// 向zip包中添加文件集合
final ArrayList fileAddZip = new ArrayList();
File file1 = zipFile.getFile();
if (file1.exists()) {
file1.delete();
}
// 向zip包中添加文件
for (File file : files) {
fileAddZip.add(file);
}
// 设置zip包的一些参数集合
final ZipParameters parameters = new ZipParameters();
// 是否设置密码(若passwordZip为空,则为false)
/*if (null != passwordZip && !passwordZip.equals("")) {
parameters.setEncryptFiles(true);
// 压缩包密码
parameters.setPassword(passwordZip);
} else { }*/
parameters.setEncryptFiles(false);
// 压缩方式(默认值)
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
// 普通级别(参数很多)
// parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
// 加密级别
// parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
// 创建压缩包完成
zipFile.createZipFile(fileAddZip, parameters);
//压缩完成后删除文件
for (File file : files) {
file.delete();
}
return zipFile;
} catch (final Exception e) {
e.printStackTrace();
return null;
}
}
*下载生成的word文件并删除临时文件
private void download(File file, HttpServletRequest request, HttpServletResponse response) {
ServletOutputStream out = null;
FileInputStream inputStream = null;
try {
String filename = file.getName();
String userAgent = request.getHeader("User-Agent");
// 针对IE或者以IE为内核的浏览器:
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
filename = java.net.URLEncoder.encode(filename, "UTF-8");
} else {
// 非IE浏览器的处理:
// filename = URLEncoder.encode(filename, "UTF-8");
filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-disposition",
String.format("attachment; filename=\"%s\"", filename));
response.setContentType("application/download");
response.setCharacterEncoding("UTF-8");
out = response.getOutputStream();
inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024 * 10];
int lenth = -1;
// 通过循环将读入的Word文件的内容输出到浏览器中
while ((lenth = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != out) out.close();
if (null != inputStream) inputStream.close();
file.delete();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
注:部分代码是在网上查找的资料,然后根据自己需要写的
java 下载zip文件_Java以压缩包方式下载文件相关推荐
- java ftp 读取 txt文件_java通过ftp方式读取文件,并解析入库
对于自己是个总结,下次使用的时候直接copy,要注意的地方是ftp访问文件的方式,访问的是ftp用户的home目录,而不是从绝对路径访问. private final static String DE ...
- java 网络文件_java实现从网络下载多个文件
java从网络下载多个文件,供大家参考,具体内容如下 首先是打包下载多文件,即打成压缩包在下载. 其次 别处的资源:可以是别的服务器,可以是网上的资源,当然也可以是本地的(更简单) 最后:一次性下载, ...
- java读取zip文件名_java无需解压zip压缩包直接读取包内的文件名(含中文)
java自带了java.util.zip工具可以实现在不解压zip压缩包的情况下读取包内文件的文件名:(注:只能是ZIP格式的,rar我试了不行)代码如下: public static String ...
- java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】
本文实例讲述了java实现切割wav音频文件的方法.分享给大家供大家参考,具体如下: import it.sauronsoftware.jave.Encoder; import it.sauronso ...
- java中写入文件_java中创建、写入文件的5种方式
在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...
- java在linux创建文件_Java中创建并写文件的5种方式
导读 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下 ...
- Spring Boot 实现将多个MinIO文件压缩成压缩包并下载至本地
1 Maven依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all< ...
- .xz是什么文件怎么解压_zip解压app下载-zip解压app安卓版下载v11.5.6
zip解压APP为用户提供了完全免费的文件解压缩功能服务,超高效的压缩和解压,支持将文档.图片.PDF和图片等多种文件夹进行压缩,压缩和解压的过程稳定高效,不会 影响文件打开也不会有乱码出现.还可以解 ...
- java追加txt文件_java怎么追加写入txt文件
java中,对文件进行追加内容操作的三种方法! import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io ...
最新文章
- jQuery ajax请求成功且返回了数据,但是不进success:function()
- 服务器控件的异步请求——UpdatePanel和ScriptManager
- android布局加色,android – 如何以编程方式将LinearLayout添加背景颜色,并将权重添加到另一个布局...
- 表达式求值(NOIP2013 普及组第二题)
- 操作系统实验一linux,操作系统实验一 Linux基本操作.doc
- Google 今天抽风了!
- 在WINDOWS XP环境下部署基于网络的开源入侵监测平台——snort
- 最拼命最努力的时候(转)
- liunux 查看系统参数、网络参数的命令
- 强强联手|任子行公司董事长景晓军一行到访云畅科技交流
- 60岁首席工程师被SpaceX边缘化,主管:我怕他退休或死了
- 基于python使用CV裁剪图片
- Unity太空大战游戏-Socket网络通信教学示例
- 可信认证之九阴真经一
- AI 人工智能 干货分享
- WCF服务通过TCP实时监控客户端状态,并可以向客户端广播推送消息,实现双向通信
- 系统定时任务linux,linux系统下定时任务(示例代码)
- 容器云java开发_使用码云构建 Docker 容器镜像并部署到华为云
- jmeter下载及安装配置
- log4net 配置文件相对路径配置