• 多文件打包下载


     /**
         * 下载
         * @param response
         * info 文件夹名
         * filenames  文件名们
         */
        @RequestMapping(value = "/imgdownload", method = RequestMethod.GET)
        public void imgDownload(GeneratorPojo generatorPojo, String info, HttpServletResponse response) throws Exception {
            generatorPojo.setSpecificPath("F:\generotar\jinbeijie-customer\src\main\java\com\heyi\jinbeijie\platform\");
            String filenames="";
            if(generatorPojo.getFileName() ==null || generatorPojo.getFileName() ==""){
                List<String> list =generatorService.getAllCode(generatorPojo.getFolderName(),generatorPojo.getSpecificPath());
                for(String l:list){
                    if(filenames==""){
                        filenames=l;
                    }else{
                        filenames=filenames+","+l;
                    }
                }
            }else{
                filenames=generatorPojo.getFileName();
            }
            String[] names=filenames.split(",");
            String filepath=generatorPojo.getSpecificPath()+generatorPojo.getFolderName();
            //存放--服务器上zip文件的目录
            String directory = "D:\repository\"+generatorPojo.getFolderName();
            File directoryFile=new File(directory);
            if(!directoryFile.isDirectory() && !directoryFile.exists()){
                directoryFile.mkdirs();
            }
            //设置最终输出zip文件的目录+文件名
            String zipFileName = generatorPojo.getFolderName()+".zip";
            String strZipPath = directory+"\"+zipFileName;
            ZipOutputStream zipStream = null;
            FileInputStream zipSource = null;
            BufferedInputStream bufferStream = null;
            File zipFile = new File(strZipPath);
            try{
                //构造最终压缩包的输出流
                zipStream = new ZipOutputStream(new FileOutputStream(zipFile));
                for (int i = 0; i<names.length ;i++){
                    //解码获取真实路径与文件名
                    String realFileName = java.net.URLDecoder.decode(names[i],"UTF-8");
                    String realFilePath = java.net.URLDecoder.decode(filepath+"\"+ names[i],"UTF-8");
                    File file = new File(realFilePath);
                    //TODO:未对文件不存在时进行操作,后期优化。
                    System.out.println(realFilePath);
                    System.out.println(file);
                    if(file.exists()){
                        zipSource = new FileInputStream(file);//将需要压缩的文件格式化为输入流
                        /**
                         * 压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样这里的name就是文件名,
                         * 文件名和之前的重复就会导致文件被覆盖
                         */
                        ZipEntry zipEntry = new ZipEntry(realFileName);//在压缩目录中文件的名字
                        zipStream.putNextEntry(zipEntry);//定位该压缩条目位置,开始写入文件到压缩包中
                        bufferStream = new BufferedInputStream(zipSource, 1024 * 10);
                        int read = 0;
                        byte[] buf = new byte[1024 * 10];
                        while((read = bufferStream.read(buf, 0, 1024 * 10)) != -1)
                        {
                            zipStream.write(buf, 0, read);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //关闭流
                try {
                    if(null != bufferStream)
                    {bufferStream.close();}
                    if(null != zipStream){
                        zipStream.flush();
                        zipStream.close();
                    }
                    if(null != zipSource)
                    {zipSource.close();}
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //判断系统压缩文件是否存在:true-把该压缩文件通过流输出给客户端后删除该压缩文件  false-未处理
            if(zipFile.exists()){
                downImg(response,zipFileName,strZipPath);
                zipFile.delete();
            }
        }
    
    
    
    
    
        public void downImg(HttpServletResponse response,String filename,String path ) {
            if (filename != null) {
                FileInputStream is = null;
                BufferedInputStream bs = null;
                OutputStream os = null;
                try {
                    File file = new File(path);
                    if (file.exists()) {
                        //设置Headers
                        response.setHeader("Content-Type", "application/octet-stream");
                        //设置下载的文件的名称-该方式已解决中文乱码问题
                        response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1"));
                        is = new FileInputStream(file);
                        bs = new BufferedInputStream(is);
                        os = response.getOutputStream();
                        byte[] buffer = new byte[1024];
                        int len = 0;
                        while ((len = bs.read(buffer)) != -1) {
                            os.write(buffer, 0, len);
                        }
                    } else {
                        response.sendRedirect("/imgUpload/imgList?error=" + ""下载的文件资源不存在"");
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                } finally {
                    try {
                        if (is != null) {
                            is.close();
                        }
                        if (bs != null) {
                            bs.close();
                        }
                        if (os != null) {
                            os.flush();
                            os.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    

      

  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/gaofangquan/p/11101761.html
Copyright © 2020-2023  润新知