软件编程
位置:首页>> 软件编程>> java编程>> java 文件流的处理方式 文件打包成zip

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

作者:介寒食  发布时间:2022-07-08 12:43:03 

标签:java,文件流,文件打包,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() {

@Override
           public void doWithRequest(ClientHttpRequest request) throws IOException {
               request.getHeaders().add("accept", MediaType.APPLICATION_OCTET_STREAM_VALUE);
           }
       };

ResponseExtractor<Boolean> responseExtractor = new ResponseExtractor<Boolean>() {
           @Override
           public 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;
       // 创建 ZipOutputStream
       ZipOutputStream 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支持:


       <!--二维码相关 start-->
       <dependency>
           <groupId>net.glxn.qrgen</groupId>
           <artifactId>javase</artifactId>
           <version>2.0</version>
       </dependency>
       <!--二维码相关 end-->

<!--文件打包相关 start-->
       <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
           <version>1.12</version>
       </dependency>
       <!--文件打包相关 end-->

前台代码:


<button type="button" onclick="downloadzip()">下载</button>

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


<script th:inline="javascript">
   function downloadzip(){

var storeType = $("#storeType").val();
           if(storeType ==""){
               bootAlertError("请选择门店!");
               return;
           }
           var url = [[@{/downLoadProductQrCode/getStreamZip}]];

//模拟form表单 返回打包流
           var form = $('<form method= "POST" action="'+ url +'" enctyped="multipart/form-data">'+
                       '<input name= "agencyId" type= "hidden" value="'+storeType+'" />'
                       +'</form>');
           form. appendTo('body'). submit(). remove();
       }
</script>

后台代码:


/**
    * @Author Ni Klaus
    * @Description //TODO 门店总代生成打包产品二维码zip
    * @Date 上午 10:38 2019/8/20 0020
    * @Param [params,response]
    * @return void
    **/
   @RequestMapping({"getStreamZip"})
   @ResponseBody
   public 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 文件流的处理方式 文件打包成zip

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

来源:https://www.cnblogs.com/jiehanshi/p/11533465.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com