广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java 文件流的处理方式 文件打包成zip
  • 827
分享到

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

2024-04-02 19:04:59 827人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

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>

后台代码:



    @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();
            }
        }
    }

最后效果:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java 文件流的处理方式 文件打包成zip

本文链接: https://www.lsjlt.com/news/154786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作