文档章节

从服务器上读取流下载并压缩

谢谢小哥
 谢谢小哥
发布于 2016/12/07 11:17
字数 181
阅读 31
收藏 1
点赞 0
评论 0


    @RequestMapping(value="/doData1/{ids}", method=RequestMethod.GET)
    @ResponseBody
    public void doData1(@PathVariable String ids,HttpServletRequest request,HttpServletResponse response) throws IOException {
        String[] strArray = null;
        ids = ids.substring(1, ids.length());
        strArray = ids.split(";");
        String filename ="媒资库.zip";
        byte[] bt;
        bt = filename.getBytes("UTF-8");
        filename = new String(bt, "8859_1");
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment;filename="
        +filename);
        ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());

        //放入需下载文件地址

        zipFile(strArray, zos);
        zos.flush();
        zos.close();

    }

 

private void zipFile(String[] ids, ZipOutputStream zos)
            throws IOException {
        for (int i = 0; i < ids.length; i++) {
            EssayArticle essayArticle = essayArticleService.get(ids[i]);
            String attachmentId = essayArticleRecordService.getNewAttachment(ids[i]);
            System.out.println(attachmentId);
            InputStream in = gridFsOperations.findOne(query(whereFilename().is(attachmentId))).getInputStream();
            String fileName = essayArticle.getArticleTitle();//下载文件时显示的文件保存名称
            zos.putNextEntry(new ZipEntry("/"+essayArticle.getId()+"/"+fileName+"."+essayArticle.getFileFormat()));
            byte[] buffer = new byte[1024];
            int r = 0;
            while ((r = in.read(buffer)) != -1) {
                zos.write(buffer, 0, r);
            }
            zos.closeEntry();
            in.close();
            //json file
            String content = "{\"id\":\""+essayArticle.getId()+"\",\"articleTitle\":\""+essayArticle.getArticleTitle()+"\"}";
            zos.putNextEntry(new ZipEntry("/"+essayArticle.getId()+"/"+essayArticle.getId()+".json"));
            zos.write(content.getBytes());
            zos.closeEntry();


        }
    }

© 著作权归作者所有

共有 人打赏支持
谢谢小哥
粉丝 2
博文 27
码字总数 50223
作品 0
沈阳
程序员
java 解压文件

文件下载和传输过程中,为了保证速度,发送一个下载请求后,得到的是一个 ZipOutputStream的压缩流,可不可以直接把这个压缩流直接解压出来,直接读取里面的数据??? 具体怎么写,求大神.......

douya_love
2013/08/06
52
1
Java无需解压直接读取Zip文件和文件内容

解析zip文件读取文件流: package test; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java......

Elivense
2016/11/30
976
0
使用腾讯云 SCF 云函数压缩 COS 对象存储文件

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云Serverless团队 在使用腾讯云 COS 对象存储的过程中,我们经常有想要把整个 Bucket 打包下载的需求,但是 COS 并...

腾讯云加社区
2017/10/19
0
0
Android NDK开发之旅30--FFmpeg视频播放

1.播放多媒体文件步骤 通常情况下,我们下载的视频文件如MP4,MKV、FLV等都属于封装格式,就是把音视频数据按照相应的规范,打包成一个文本文件。我们可以使用MediaInfo这个工具查看媒体文件...

香沙小熊
2017/12/08
0
0
基于Node.js的HTTP/2 Server实践

虽然HTTP/2目前已经逐渐的在各大网站上开始了使用,但是在目前最新的Node.js上仍然处于实验性API,还没有能有效解决生产环境各种问题的应用示例。因此在应用HTTP/2的道路上我自己也遇到了许多...

clasky
05/30
0
0
c#开发大全、系列文章、精品教程

全栈工程师开发手册 (作者:栾鹏) c#系列教程: c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象 c#文件夹常用操作,属性设置,遍历、压缩 c#获取网页源代码的5种方式...

luanpeng825485697
2017/10/03
0
0
玩转 Linux 之:网络工具中的瑞士军刀 Netcat

netcat号称网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的...

大数据之路
2015/05/08
0
1
webcamflv开发这看到了回复下可以吗

需要把这个程序做到ARM芯片里面在嵌入式linux上运行,直接读取sensor视频流,压缩成flv后发到指定的流媒体服务器上,要要高清,具体QQ:66677627 13311202226...

北京视元网络高清安防厂
2015/12/12
125
0
Android 网络编程(三)HttpURLConnection

HttpURLConnection HTTP的URLConnection(RFC 2616)用于通过Web发送和接收数据。数据可以是任何类型和长度。该类可用于发送和接收长度未预先知道的流数据。 使用步骤 HttpURLConnection使用...

VNanyesheshou
2017/08/25
0
0
Call Me By Your Name - node.js的小美好

node的出现,真是让用惯js的前端工程师遇见了爱情,进而大踏步的走向了后端,尽管有时候会被质疑,不被理解。那又有什么关系。 本文是《一站到底 ---前端基础之网络》 代码的整理。但也是一篇...

17点
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部