java下载多图压缩成包_爱吃榴莲酥的姑娘的博客-程序员信息网

技术标签: 笔记  

@RequestMapping(value = "/download")
    public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {
        PageData pd = this.getPageData();
        pd = printmxService.findById(pd);
        String type = pd.getString("RESERVE3");
        if(type.equals("身份证")){//上传类型为身份证时,正反面打包为压缩包下载到桌面
        	//获取图片
        	String []path ={PathUtil.getClasspath()+pd.getString("FILE"), PathUtil.getClasspath()+pd.getString("RESERVE2")};
	        // 要生成的压缩文件地址和文件名称
	        String desPath = "C:\\Users\\Administrator\\Desktop\\DownLoad.zip";
	        File zipFile = new File(desPath);
	        ZipOutputStream zipStream = null;
	        FileInputStream zipSource = null;
	        BufferedInputStream bufferStream = null;
	        try {
	            //构造最终压缩包的输出流
	            zipStream = new ZipOutputStream(new FileOutputStream(zipFile));
	            for(int i =0;i<path.length;i++){
	                File file = new File(path[i]);
	                //将需要压缩的文件格式化为输入流
	                zipSource = new FileInputStream(file);
	                //压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样
	                ZipEntry zipEntry = new ZipEntry(file.getName());
	                //定位该压缩条目位置,开始写入文件到压缩包中
	                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.close();
	                if(null != zipSource) zipSource.close();
	            } catch (IOException e) {
	                e.printStackTrace();
	            }
	        }
        }else {//上传类型为单文件,直接下载
        	String fileNam = pd.getString("FILE");
            String fileName = fileNam.substring(23);
            FileDownload.fileDownload(response, PathUtil.getClasspath() + Const.FILEPATHFILEOA + fileName, fileName);

		}
        
    }

获取文件的类型,并判断,多图即压缩包,单文件直接下载。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guojiao1006/article/details/100663374

智能推荐

同时安装tensorflowl和pytorch和torch-geometric_torch和tensorflow能一起用么_kin55的博客-程序员信息网

其实根本不用换源pip install tensorflow==2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

k8s(九)ingress_防止ingress监控_cc_奋斗ing的博客-程序员信息网

k8sIngress介绍Http代理Https代理Ingress介绍我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点:NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。LoadBalancer的缺点是每个Service都需要一个LB,浪费,麻烦,并且需要kubernetes之外的设备的支持。基于这种现状,kubernetes提供了Ingress资源对象,I

CStdioFile的用法_cstdiofile包含哪个头文件_不见加菲的博客-程序员信息网

关于CStdioFileCStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件。流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件。当你读一个文件时

算法系列之十二:多边形区域填充算法--扫描线种子填充算法_wu_wenhuan的博客-程序员信息网

1.3扫描线种子填充算法        1.1和1.2节介绍的两种种子填充算法的优点是非常简单,缺点是使用了递归算法,这不但需要大量栈空间来存储相邻的点,而且效率不高。为了减少算法中的递归调用,节省栈空间的使用,人们提出了很多改进算法,其中一种就是扫描线种子填充算法。扫描线种子填充算法不再采用递归的方式处理“4-联通”和“8-联通”的相邻点,而是通过沿水平扫描线填充像素段,一段一段地来处理“4

ZCU104--------PYNQ上手笔记 | ① 启动Pynq_乔布斯zero的博客-程序员信息网

今天刚刚到手一块ZCU104。要得,开干。PYNQ项目是一个支持Xilinx Zynq器件的开源软件框架,目的在于借助Python降低Zynq嵌入式系统开发门槛,有丰富的组件:可编程逻辑的控制 Jupyter Notebook接口 预安装的Python库 网络/USB/UART接口要使用Pynq,需要Pynq image和Zynq芯片,目前Pynq项目支持三个板:Digilent的Pynq-Z1 TUL的Pynq-Z2 Xilinx的ZCU104参考教程Pynq入门指南Get.

基于qemu-riscv从0开始构建嵌入式linux系统ch16. Framebuffer显示设备_virtio-blk-device_Quard_D的博客-程序员信息网

基于qemu-riscv从0开始构建嵌入式linux系统ch16. Framebuffer显示设备virtio-gpu-device本节我们给qemu添加一块虚拟的显示设备,方便后面研究一些GUI的应用。由于之前我们向系统添加了8组virtio-mmio设备,并且挂载了virtio-blk-device作为文件系统存储设备,这次我们再添加virtio-gpu-device设备:$SHELL_FOLDER/output/qemu/bin/qemu-system-riscv64 \-M quard-st

随便推点

php 开发环境显示所有错误; preg_replace preg_replace_callback 函数用法_fastadmin preg_replace_callback报错_fareast_mzh的博客-程序员信息网

php 开发环境显示所有错误&amp;lt;?phperror_reporting(E_ALL);ini_set('display_errors', 1);preg_replace  preg_replace_callback 函数用法&amp;lt;?php// http://php.net/manual/en/function.preg-replace.php// mixed preg...

想练习SQL又没有数据库环境?这几个可以在线练习SQL的网站满足你_sql在线练习网站_Lvshen的技术小屋的博客-程序员信息网

如果你想练习SQL,恰巧你的电脑没有SQL环境,那么下面几个在线练习SQL的网站肯定能满足你的需求。TiDB“地址:https://tour.pingcap.com/”作为在2019 TiDB 黑客马拉松中斩获二等奖的项目,TiDB-Wasm 的诞生是WebAssembly (Wasm),[Golang]语言以及TiDB 社区碰撞结合的产物,旨在为用户提供一个可以轻松实验 SQL 语句,使用 MySQL 查询测试 TiDB 的 SQL 兼容性的方式。以命令行的形式展示。SQL F

结对编程之效能分析_Ensheng Shi的博客-程序员信息网

作业三 文本文件中英语单词的频率作业要求:项目git地址:Assigment3_of_ASE作业简介step0-输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位step1:输出单个文件中的前 N 个最常出现的英语单词。step2: 支持 stop wordsstep3: 我们想看看常用的短语是什么, 怎么办呢?step...

vue,js书籍_您应该阅读的十大Vue JS书籍_cuk5340的博客-程序员信息网

vue,js书籍 Vue JS书籍 (Vue JS Books)Vue is a progressive framework for building user interfaces. Vue是用于构建用户界面的渐进框架。 The core library is focused on the view layer only, and is easy to pick up and integr...

E - Cover it!_dieche3140的博客-程序员信息网

图的染色问题,也就是图的遍历,比赛的时候以为要求最小的染色点,所以没啥思路,下来发现是没有要求的,那直接遍历就行了。数据很大,需要做好dfs的优化,要不会TTTTTTTTT! 1 #include &lt;bits/stdc++.h&gt; 2 using namespace std; 3 int t; 4 const int MAXN=2e5+10; 5 vec...

GDAL 编译(转)_fanwenyuan_fwy的博客-程序员信息网

一、简单的编译1、使用VisualStudio IDE编译首先进入GDAL的源代码目录,可以看到有几个sln为后缀的文件名,比如makegdal10.sln,makegdal80.sln,makegdal71.sln,makegdal90.sln 。这些文件是VisualStudio的工程文件,后面的数字对应的VS的版本号,71表示的VS2003,80表示VS2005,90表示VS

推荐文章

热门文章

相关标签