java ant zip.setproject(prj);_Web端文件打包.zip下载

使用ant.jar包的API进行文件夹打包。直接上代码:

String zipfilename = "test.zip";

File zipfile = new File(zipfilename);

org.apache.tools.ant.types.FileSet fileSet = new FileSet();

org.apache.tools.ant.Project prj = new Project();

org.apache.tools.ant.taskdefs.Zip zip = new Zip();

zip.setProject(prj);

zip.setDestFile(zipfile);

fileSet.setProject(prj);

fileSet.setDir(file); // 这里是文件路径的设置。

zip.addFileset(fileSet);

zip.execute();

HttpServletResponse response = super.currentResponse;

response.setHeader("Content-Type", "application/zip");

response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipfilename, "UTF-8"));

OutputStream os = response.getOutputStream();

InputStream is = new FileInputStream(zipfile);

DownloadUtil.transfer(is, os);

zipfile.delete();

如果在下载的时候,不希望下载文件路径下的所有文件,而是部分符合自己需求的文件的话。

下面这个例子,除了check了需求之外,还远端的文件进行了操作,利用ChannelSftp取得的连接,进行文件读入并下载。

如下:

private com.jcraft.jsch.ChannelSftp channel; // 这行是类成员变量

String zipfilename = getServerZipFileName(inputfilename);

if (channel == null || !channel.isConnected()) {

channel = SftpUtils.connect(sftpHost, Integer.parseInt(sftpPort), sftpUsername, sftpPassword);// 取得连接。

}

HttpServletResponse response = super.currentResponse;

try {

boolean isMultiFilesName = isMultiFilesName(inputfilename);

Vector vs = channel.ls(logfilepath);

if (vs.isEmpty()) {

return false;

} else {

response.setHeader("Content-Type", "application/octet-stream");

response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipfilename, "UTF-8"));

OutputStream out = response.getOutputStream();

java.util.zip.ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(out));

for (LsEntry entry : vs) {

if (entry.getAttrs().toString().startsWith("-")) {

String entryname = entry.getFilename();

if (isMultiFilesName && entryname.startsWith(inputfilename.substring(0, inputfilename.length() - 1))

&& !entryname.matches("^.*[\\*]+.*$") || entryname.equals(inputfilename)) { // 符合规则的文件才做输出处理

java.util.zip.ZipEntry zipentry = new ZipEntry(entryname);

zipOut.putNextEntry(zipentry);

InputStream bis = channel.get(logfilepath + entryname); // 这里要注意,目标目录下的文件名称,不能有*,不然这一步get方法的目标可能是多个文件而出错。

if (bis != null) {

int count = 0;

byte[] buffer = new byte[8192];

while ((count = bis.read(buffer)) > 0) {

zipOut.write(buffer, 0, count);

}

bis.close();

}

}

}

}

zipOut.close();

}

} catch (Exception e) {

response.reset();

e.printStackTrace();

return false;

} finally {

if (channel != null && !channel.isClosed()) {

channel.getSession().disconnect();

channel.disconnect();

}

}

打包zip下载

//首先引入的文件为org.apache的切记不是jdk的import org.apache.tools.zip.ZipOutputStream;import org.apache.tools.zip ...

Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:本文以这篇文章的基础,提供了Byt ...

文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

asp.net 文件压缩zip下载

今天分享下昨天做的一个东西 asp.net 的文件  zip 批量下载,首先你需要去 到http://dotnetzip.codeplex.com这个站点下载zip 的包,在里面找到 Ionic.Z ...

java 多个文件打包zip

/** * 多个文件打包成zip */ public class ZipDemo { private static void create() throws Exception{ String pat ...

批量下载,多文件压缩打包zip下载

0.写在前面的话 图片批量下载,要求下载时集成为一个压缩包进行下载.从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助. 1.先叨叨IO ...

web端文件上传,预览,下载,删除

//HTML部分

芯灵思Sinlinx A64开发板Linux内核定时器编程

开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 开发板详细参数 https://m.tb.cn/h.3wMaSKm 开发板交流群 641395230 Linux 内核定时器是内 ...

Python爬虫-04:贴吧爬虫以及GET和POST的区别

目录 1. URL的组成 2. 贴吧爬虫 2.1. 只爬贴吧第一页 2.2. 爬取所有贴吧的页面 3. GET和POST的区别 3.1. GET请求 3.2. POST请求 3.3. 有道翻译模拟发送 ...

MySQL导入SQL语句报错 : MySQL server has gone away (已解决)

MySQL server has gone away 解决的方法其实很简单,我相信也有很多人遇到了这个问题.比如DZ论坛,安装好服务器,但是清空缓存等操作数据库的动作,运行时间稍长就会出现 MySQL ...

for in 循环

for  in循环可以循环遍历数组  关键也可以循环遍历对象!而一般的for循环只能循环遍历数组, 当循环遍历对象时key值代表键值对的键,obj[key]则是对应键的值: 当循环遍历数组时,数组不是 ...

robot framework添加库注意事项

添加库 假设你的项目结构是这样: 项目 ..myLib(库目录) ..目录1 ..测试用例套件1 此时你需要在“测试用例套件1”中用相对路径添加库myLib,你应该填:../myLib/ 特别注意后面 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值