• 页面下载多个文件创建临时压缩包调用浏览器自带弹窗下载


    结合:页面下载远程服务器单个及多个文件并打成压缩包下载到本地

    调整为多个文件下载时创建临时压缩包,下载完成后,临时压缩包删除

    路径调整:new File(request.getSession().getServletContext().getRealPath("/")+"/" + ns.getFile_name()+".zip");//本地tomcat路径webapps下

    整合后:

                File zipFile = null;
                        ZipOutputStream out = null;
                        String newfilename ="";
                        if(sids.length==1 && ns.getType()==0 ){
                            Networkfile nf = networkfileService.selectById(ns.getFid());
                            URL httpurl=new URL("http://服务器路径/"+nf.getSf_fid());
                            HttpURLConnection httpConn=(HttpURLConnection)httpurl.openConnection();
                            httpConn.setDoOutput(true);// 使用 URL 连接进行输出
                            httpConn.setDoInput(true);// 使用 URL 连接进行输入
                            httpConn.setUseCaches(false);// 忽略缓存
                            httpConn.setRequestMethod("GET");// 设置URL请求方法
                            //可设置请求头
                            httpConn.setRequestProperty("Content-Type", "application/octet-stream");
                            httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
                            httpConn.setRequestProperty("Charset", "UTF-8");
                            //可设置请求头
                            byte[] file =input2byte(httpConn.getInputStream());
                            response.setContentType("application/octet-stream");
                            response.setHeader("Content-Disposition", "attachment;filename=" + new String(ns.getFile_name().getBytes("UTF-8"),"ISO-8859-1"));
                            response.getOutputStream().write(file);
                            System.out.println("单个下载成功");
                         }else{
                             System.out.println("压缩开始...");
                             for (String i : sids) {
                                 ns = networkstructureService.selectById(Integer.parseInt(i));
                                 if(zipFile == null){
                                     //拿取第一个选中项名称,作为文件夹名称,创建临时文件夹
                                      newfilename = request.getSession().getServletContext().getRealPath("/")+"/" + ns.getFile_name()+".zip";
                                      zipFile = new File(newfilename);
                                      //创建zip输出流
                                      out = new ZipOutputStream( new FileOutputStream(zipFile));
                                  }
                                 //调用压缩打包函数
                                 compress(out,ns,ns.getFile_name());
                              }
                             System.out.println("创建临时压缩包完成");
                             // 下载,并删除临时文件zip
    第一种调用读取                         
    downloadFile2(newfilename.substring(newfilename.lastIndexOf("/")+1),zipFile,response);
    第二种调用读取 利用上面单个文件读取方法直接输出也可以
    byte[] file =input2byte(new FileInputStream(zipFile.getPath()));
    response.setContentType("application/zip");
    response.setHeader("Content-Disposition", "attachment;filename=" + new String(newfilename.substring(newfilename.lastIndexOf("/")+1).getBytes("UTF-8"),"ISO-8859-1"));
    response.getOutputStream().write(file);
    }
    if(out!=null)out.close(); if(zipFile!=null)zipFile.delete();//删除临时压缩包文件

    下载,删除临时文件方法

    public static void downloadFile2(String filename,File file,HttpServletResponse response) throws FileNotFoundException {
            try {
                 // 以流的形式下载文件。
                 BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
                 byte[] buffer = new byte[fis.available()];
                 fis.read(buffer);
                 fis.close();
                 OutputStream bos = new BufferedOutputStream(response.getOutputStream());
                 response.setContentType("application/zip");
                 response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("UTF-8"),"ISO-8859-1"));
                 
                 bos.write(buffer);
                 bos.flush();
                 bos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    以上综合代码参考两个文献地址:

    https://www.cnblogs.com/zeng1994/p/7862288.html
    https://blog.csdn.net/java_zhaoyu/article/details/82378906
     

    页面中js代码由ajax方法调整为download

    自动调用浏览器自带下载弹窗

    download()方法

    //传入参数src为文件地址
    function  download (src) {
        var download_file= {} 
       if (typeof(download_file.iframe) == "undefined") {
         var iframe = document.createElement("iframe");
         download_file.iframe = iframe;
         document.body.appendChild(download_file.iframe);
       }
       download_file.iframe.src = src
      download_file.iframe.style.display = "none";
     }
  • 相关阅读:
    导入导出通用库
    镜像下载地址
    后端请求接口的几种方式
    获取本机的mac地址
    Arduino串口的一些高级用法
    手机与Arduino蓝牙串口通讯实验及完整例程
    ARDUINO+MCP2515实现CAN通讯接收
    Arduino IIC 主从设备连接通信
    上位机与单片机的通信问题
    NRF24L01多对一、多通道通讯关键代码
  • 原文地址:https://www.cnblogs.com/mangwusuozhi/p/11137649.html
Copyright © 2020-2023  润新知