jsp页面js代码:

function downloadAttached(){
var id = [];
id.push(infoid);
var options = {};
options.action = "${pageContext.request.contextPath}/DocumentController/downloadattached";
options.argname1="id";
options.argvalue1=id.join(',');
filedownload(options);
parent.$.messager.progress('close');
}

控制层java相关代码

public ModelAndView DownloadAttached(HttpServletRequest request, HttpServletResponse response,String id,String ie) throws Exception{
String toClient=attService.downloadAttached(request, response, id, projectName);
String[] split = toClient.split("/");
String storeName = toClient;
String realName = split[split.length - 1];
String contentType = "application/x-zip-compressed";

try {
excelExport.download(request,response,storeName,contentType,realName,ie);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;
}

//download方法

public static void download(HttpServletRequest request,
HttpServletResponse response, String storeName, String contentType,
String realName, String ie) throws Exception {

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;

String ctxPath = request.getSession().getServletContext()
.getRealPath("/");
String downLoadPath = ctxPath + storeName;

long fileLength = new File(downLoadPath).length();

response.setContentType(contentType);
String finalFileName;

if (ie.equals("1")) {
finalFileName = java.net.URLEncoder.encode(realName, "UTF8");
} else {
finalFileName = new String(realName.getBytes("UTF-8"), "ISO-8859-1");
}

response.setHeader("Content-disposition", "attachment; filename="
+ finalFileName);
response.setHeader("Content-Length", String.valueOf(fileLength));

bis = new BufferedInputStream(new FileInputStream(downLoadPath));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();

}

打包下载代码:将压缩包文件下载到服务器项目中的目录下然后用户去下载

private static String downpath = "down/";
public static String compress(String[] path,String strZipName) throws Exception {
byte[] buffer = new byte[1024];
String zippath = PathUtil.combine(PathUtil.getWebRootPath(), downpath);

//strZipName中有空格会生成、下载不成功
String zipName=zippath+strZipName+".zip";
String returnzipname=downpath+strZipName+".zip";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipName));

File[] file1= new File[path.length];

for(int i=0;i<file1.length;i++) {
file1[i]=new File(path[i]);
String combine = PathUtil.combine(PathUtil.getWebRootPath(),
file1[i].toString());
FileInputStream fis = new FileInputStream(combine);

out.putNextEntry(new ZipEntry(file1[i].getName()));
int len;

while((len = fis.read(buffer))>0) {

out.write(buffer,0,len);

}

out.closeEntry();

fis.close();

}

out.close();
return returnzipname;
}

java 实现多文件打包下载的更多相关文章

  1. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...

  2. PHP 多文件打包下载 zip

    <?php $zipname = './photo.zip'; //服务器根目录下有文件夹public,其中包含三个文件img1.jpg, img2.jpg, img3.jpg,将这三个文件打包 ...

  3. Java 多个文件压缩下载

    有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...

  4. flask BytesIO() 多个文件打包下载 zipfile

    使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间. 后引入BytesIO将文件写入到内存中然后下载: def dl_pla ...

  5. servlet实现多文件打包下载

    当用户一次下载多个文件时.普通情况是,每下载一个文件,均要弹出一个下载的对话框.这给用户造成了非常大不便. 比較理想的情况是,用户选择多个文件后.server后端直接将多个文件打包为zip.以下贴出实 ...

  6. java 多个文件打包zip

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

  7. Java批量文件打包下载

    经常遇到选择多个文件进行批量下载的情况,可以先将选择的所有的文件生成一个zip文件,然后再下载,该zip文件,即可实现批量下载,但是在打包过程中,常常也会出现下载过来的zip文件中里面有乱码的文件名, ...

  8. Java批量文件打包下载zip

    网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /* * 另存为 */ @RequestMapping(" ...

  9. 【Java】Java批量文件打包下载zip

    网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /*      * 另存为      */     @Request ...

随机推荐

  1. C# Redis实战(三)

    三.程序配置 在C# Redis实战(二)中我们安装好了Redis的系统服务,此时Redis服务已经运行. 现在我们需要让我们的程序能正确读取到Redis服务地址等一系列的配置信息,首先,需要在Web ...

  2. vue使用 better-scroll的参数和方法

    格式:var obj = new BScroll(object,{[option1,],.,.}); 注意: 1.要确保object元素的高度比其父元素高 2.使用时,一定要确保object所在的do ...

  3. python 全栈开发,Day1

    python基础一 一,Python介绍 python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为 ...

  4. python 中的 args,*args,**kwargs的区别

    一.*args的使用方法 *args 用来将参数打包成tuple给函数体调用 例子一:def function(*args):      print(args, type(args))function ...

  5. selenium 断言与验证

    断言和验证都是判断结果是否跟预期效果是否一致,不一致的情况下,断言会导致测试用例直接失败,程序不会继续执行:验证的测试用例会继续执行. 断言的4种模式+5种手段: assert 断言失败时,该测试将终 ...

  6. java--计时器

    计时器 一.窗口化 public class Pro extends JFrame{ private JTextField textField = new JTextField(45);//系统时间文 ...

  7. 分享Java开发的利器-Lombok

    译注:Lombok是一个很老的项目了,也非常实用,但奇怪的是这么多年来似乎一直不温不火.很多Lombok特性可以参考它的官网介绍哈.兄弟连教育在这里只是简单介绍一下它的基础功能. Lombok是一个旨 ...

  8. spring boot高性能实现二维码扫码登录(上)——单服务器版

    前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...

  9. Vue之七导航守卫

    { path:'/',component:Recommend,beforeEnter: (to, from, next) => { console.log(to); ajax('get','/a ...

  10. 深入理解Session与Cookie(一)

    Session,Cookie简介: Session和Cookie的作用都是为了保持用户与后端服务器的交互状态,但是各自都有缺陷: Cookie: 随着Cookie的个数的增多和访问量的增加,它占用的网 ...