自动通知浏览器打包下载批量文件(js,java,servlet)前端后端

1.在js中第一种方式

  var xhr = new XMLHttpRequest();
  xhr.open('POST', url, true);        // 也可以使用POST方式,根据接口
  xhr.responseType = "blob";    // 返回类型blob
  xhr.onload = function () {
   if (this.status === 200) {
     var blob = this.response;
     var reader = new FileReader();
       // 转换为base64,可以直接放入a表情href
       reader.readAsDataURL(blob);    
        reader.onload = function (e) {
          var a = document.createElement('a');
          a.download = 'data.zip';//下载文件名
             a.href = e.target.result;
              $("body").append(a);    // 修复firefox中无法触发click
                a.click();
             $(a).remove();
             }
                }
                 };
      xhr.send();

1.在js中第二种方式注意该方式会新打开一个页面

function downloadSend(url) {
        var ticketNumber=$("#ticketNumber").val();
        var json  = {
            "searchJson":ticketNumber
        };
        var form = $("<form>");
        form.attr('style', 'display:none');
        form.attr('target', '');
        form.attr('method', 'post'); //请求方式
        form.attr('action', url);//请求地址

        var input1 = $('<input>');//将你请求的数据模仿成一个input表单
        input1.attr('type', 'hidden');
        input1.attr('name', 'json');//该输入框的name
        input1.attr('value',JSON.stringify(json));//该输入框的值

        $('body').append(form);
        form.append(input1);

        form.submit();
        form.remove();
        //防止页面跳转
        return false;
    }

3.java后端只需要一个工具类就可以通知浏览器打包下载批量文件;

  /**
     * 	通知浏览器打包下载文件
     * @param srcfile 存放file文件的集合
     * @param fileNameList 存放文件名的集合 (注意:需要与srcfile文件对应)
     * @param zipFileName 压缩包名字
     * @param response 响应
     * @throws IOException
     */
    public static void zipFiles(List<File> srcfile, List<String> fileNameList,String zipFileName, HttpServletResponse response) throws IOException {
    	 byte[] buf = new byte[1024];
         // 获取输出流
         BufferedOutputStream bos = null;
         try {
             bos = new BufferedOutputStream(response.getOutputStream());
         } catch (IOException e) {
             e.printStackTrace();
         }
         FileInputStream in = null;
         ZipOutputStream out = null;
         try {
             response.reset(); // 重点突出
             // 不同类型的文件对应不同的MIME类型
             response.setContentType("application/x-msdownload");
             response.setCharacterEncoding("utf-8");
             response.setHeader("Content-disposition", "attachment;filename=" + zipFileName + ".zip");
  
             // ZipOutputStream类:完成文件或文件夹的压缩
             out = new ZipOutputStream(bos);
             for (int i = 0; i < srcfile.size(); i++) {
                 in = new FileInputStream(srcfile.get(i));
                 // 给列表中的文件单独命名
                 out.putNextEntry(new ZipEntry(fileNameList.get(i)));
                 int len = -1;
                 while ((len = in.read(buf)) != -1) {
                     out.write(buf, 0, len);
                 }
             }
             out.close();
             bos.close();
             LOGGER.info("压缩完成.");
         } catch (Exception e) {
        	 LOGGER.error(e);
         } finally {
             if (in != null) in.close();
             if (out != null) out.close();
         }

    }

补充:新人做笔记使用;如有错误请大佬手下留情,望指正,必改正!(谢谢!!!)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值