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

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

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

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

路径调整: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);
                     }
                    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();
        }
    }

页面中js代码由ajax方法调整为download,会自动调用浏览器自带下载弹窗

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

download()方法

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

 

上一篇:类型系统的运算法则


下一篇:k8s每日备份脚本