java|java 文件流的处理方式 文件打包成zip

目录

  • java 文件流的处理 文件打包成zip
    • 1、下载文件到本地
    • 2、java后端下载
    • 3、文件打包成zip
  • 后台多文件打包成zip返回流 前台提供按钮一键下载

    java 文件流的处理 文件打包成zip
    1、下载文件到本地
    public void download(HttpServletResponse response){String filePath =""; //文件路径String fileName =""; //文件名称// 读到流中InputStream inStream = new FileInputStream(filePath); // 设置输出的格式response.reset(); response.setContentType("bin"); response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); IOUtils.copy(inStream, response.getOutputStream()); }


    2、java后端下载
    方式一:
    new URL(fileUrl + item.getcBhFileserver()).openStream()

    方法二:
    public Boolean addFile(String url, String id, String fileName) { RequestCallback requestCallBack = new RequestCallback() { @Overridepublic void doWithRequest(ClientHttpRequest request) throws IOException {request.getHeaders().add("accept", MediaType.APPLICATION_OCTET_STREAM_VALUE); }}; ResponseExtractor responseExtractor = new ResponseExtractor() { @Overridepublic Boolean extractData(ClientHttpResponse response) throws IOException {if (response.getStatusCode() == HttpStatus.OK) {//得到文件流InputStream input = response.getBody(); return true; }return false; }}; return restTemplate.execute(url, HttpMethod.GET, requestCallBack, responseExtractor, id); }


    3、文件打包成zip
    public void zipFilesAll() throws Exception {String zipPath = ""; //zip包路径String zipFileName = ""; //zip包名称File zipFile = new File(zipFileName .toString()); // 创建 FileOutputStream 对象FileOutputStream fileOutputStream = null; // 创建 ZipOutputStreamZipOutputStream zipOutputStream = null; try {//创建文件夹zipFile = new File(zipPath ); FileUtils.forceMkdir(zipFile); //创建文件zipFile = new File(zipFileName .toString()); if (!zipFile.exists()) {zipFile.createNewFile(); } // 实例化 FileOutputStream 对象fileOutputStream = new FileOutputStream(zipFileName.toString()); // 实例化 ZipOutputStream 对象zipOutputStream = new ZipOutputStream(fileOutputStream); // 创建 ZipEntry 对象ZipEntry zipEntry = null; for (CL cl: ClList) {// 实例化 ZipEntry 对象,源文件数组中的当前文件zipEntry = new ZipEntry(tCltjjl.getcClmc() + ".zip"); zipOutputStream.putNextEntry(zipEntry); IOUtils.copy(new FileInputStream(cl.getcPath(), zipOutputStream); }} catch (Exception e) {}finally{//记得删除文件}}


    后台多文件打包成zip返回流 前台提供按钮一键下载 项目pom文件添加二维码操作,和文件打包的maven支持:
    net.glxn.qrgenjavase2.0 org.apache.commonscommons-compress1.12

    【java|java 文件流的处理方式 文件打包成zip】前台代码:

    js(我用了thymeleaf模板)代码:

    后台代码:
    /*** @Author Ni Klaus* @Description //TODO 门店总代生成打包产品二维码zip* @Date 上午 10:38 2019/8/20 0020* @Param [params,response]* @return void**/@RequestMapping({"getStreamZip"})@ResponseBodypublic void findList(@RequestParam Map params,HttpServletResponse response) throws Exception {String agencyId = (String) params.get("agencyId"); AgencyAccount agencyAccount = agencyAccountService.getAccountByAgencyId(agencyId); //这里设置打包后的zip文件名String downloadName = agencyAccount.getName()+".zip"; try{response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment; fileName=" + new String(downloadName.getBytes(),"ISO8859-1")); }catch(UnsupportedEncodingException e){log.error("----------下载文件名编码时出现错误------"+e.getMessage()); }OutputStream outputStream = response.getOutputStream(); ZipArchiveOutputStream zous = new ZipArchiveOutputStream(outputStream); zous.setUseZip64(Zip64Mode.AsNeeded); zous.setEncoding("utf-8"); try{//我这里是通过不同产品类型生成不同产品的二维码图片流//具体你想生成什么类型的多个文件打包,只需要循环创建ArchiveEntry 然后zous.putArchiveEntry(entry)就可以了StoreProductType[] storeProductTypes = StoreProductType.values(); for (StoreProductType storeProductType : storeProductTypes) {String url = "http://m.xxx.cn/goods/pay/xxx.html?productid="+storeProductType.getProductId()+ "&agencycode="+ agencyId +"&channelid=def&appfrom=sqjk&isstore=1"; //打包文件里的每个文件的名字String imgName = storeProductType.getDescription()+".png"; ByteArrayOutputStream out = QRCode.from(url).to(ImageType.PNG).withSize(300,300).stream(); byte[] bytes = out.toByteArray(); ArchiveEntry entry = new ZipArchiveEntry(imgName); zous.putArchiveEntry(entry); zous.write(bytes); zous.closeArchiveEntry(); if (out != null) {out.close(); }}}catch (Exception e){e.printStackTrace(); log.error("---------------门店总代生成二维码打包流出错----------------"+e.getMessage()); }finally{if(outputStream != null){outputStream.close(); }if(zous != null){zous.close(); }}}

    最后效果:
    java|java 文件流的处理方式 文件打包成zip
    文章图片

    java|java 文件流的处理方式 文件打包成zip
    文章图片

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

      推荐阅读