通过HttpURLConnection下载图片到本地--批量下载
一.背景说明
这篇文章讲述的是批量下载附件,在上一篇文章中,介绍了下载单个附件(上一篇文章)。
二.实现思路
主要的实现思路:创建文件夹->文件夹中创建需要下载的文件->压缩文件夹->下载zip->删除文件夹
三.代码
1.html
/*
* 批量下载附件
*/
$("#merchantApproval-annes-center-tb .batchDownloadButton").click(function(){
//获取附件列表的所有记录
var rows = $("#merchantApproval-annes-center-dg").datagrid("getRows");
//如果记录不为空
if(rows.length>0){
var imgList = "";
var imgName = "";
//遍历记录,获取图片地址列表和图片名称列表,以“|”隔开
$.each(rows,function(index,obj){
imgList = imgList + obj.annUrl + "|";
imgName = imgName + obj.annName + "|";
});
//临时构造一个form表单,用来发送post请求
//如果直接发送get请求,可能因为url过长导致失败,所以就需要发送post请求
var rootDiv = $("#merchantApproval-annes");
rootDiv.append("<form id='batchDownloadForm' method='post' action='${ctx}/approvalImageHandle.do?method=batchDownload'>"
+"<input name='imgList' value="+ imgList +">"
+"<input name='imgName' value="+ imgName +">"
+"</form>");
//发送完请求后,删除掉这个临时的form
$("#batchDownloadForm").submit().remove();
}else{
//提示用户
showTip("没有可以下载的数据!");
}
});
2.Controller
/**
* 批量下载附件<br/>
* 主要的实现思路:创建文件夹->文件夹中创建需要下载的文件->压缩文件夹->下载zip->删除文件夹
* @param request
* @param response
* @throws Exception
*/
@RequestMapping(params = "method=batchDownload")
public void batchDownload(HttpServletRequest request, HttpServletResponse response) throws Exception{
//图片资源地址
String _imgList = request.getParameter("imgList");
//图片名称
String _imgName = request.getParameter("imgName");
//图片资源地址列表
String[] imgUrlList = _imgList.split("\\|");
//图片名称列表
String[] imgNameList = _imgName.split("\\|");
//媒体服务器的地址
String imgShowUrl = (String)request.getSession().getAttribute("imgShowUrl");
//创建文件夹
//request.getRealPath()方法使用request.getSession().getServletContext().getRealPath()代替
File fileDir = new File(request.getSession().getServletContext().getRealPath("/") + "/batchDownload");
if(!fileDir.exists()){
fileDir.mkdir();
}
/*
* 在batchDownload文件夹下创建每个文件
*/
for(int i = 0; i < imgUrlList.length; i++){
//图片资源地址列表加上imgShowUrl构成完整的url地址
imgUrlList[i] = imgShowUrl + "/" + imgUrlList[i];
URL url = new URL(imgUrlList[i]);
HttpURLConnection httpURL = (HttpURLConnection)url.openConnection();
//设置网络连接超时时间
httpURL.setConnectTimeout(5000);
//设置应用程序要从网络连接读取数据
httpURL.setDoInput(true);
httpURL.setRequestMethod("GET");
int responseCode = httpURL.getResponseCode();
if(responseCode == 200){
//如果响应为“200”,表示成功响应,则返回一个输入流
InputStream inputStream = httpURL.getInputStream();
//文件输出流,创建文件
FileOutputStream outputStream = new FileOutputStream(fileDir.getPath() + "\\" + (i+1) + "_" + imgNameList[i]);
byte[] data = new byte[1024];
int len = 0;
while((len = inputStream.read(data)) > 0){
outputStream.write(data, 0, len);
}
outputStream.close();
inputStream.close();
}
}
/*
* 文件创建完毕后压缩文件夹为zip
*/
Date date = new Date();
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="+ "batchDownload" +date.getTime()+".zip");
//创建压缩文件输出流
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
//获取文件列表
File[] files = fileDir.listFiles();
for(int i = 0; i < files.length; i++){
File f = files[i];
zos.putNextEntry(new ZipEntry(f.getName()));
FileInputStream fis = new FileInputStream(f);
byte[] bs = new byte[1024];
int len = 0;
while((len = fis.read(bs)) > 0){
zos.write(bs, 0, len);
}
fis.close();
}
zos.flush();
zos.close();
/*
* 文件压缩完毕后删除创建的文件夹
*/
if(fileDir.exists()){
for(int i = 0; i< files.length; i++){
files[i].delete();
}
}
}
通过HttpURLConnection下载图片到本地--批量下载的更多相关文章
- 通过HttpURLConnection下载图片到本地--下载附件
一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片.下篇 ...
- php下载图片到本地
写了一天,就写了这么点代码,凑合用吧. #saveImage.php<?php /** * 图片下载方法,提供两种图片保存方式: * 1.按照图片自带的名称保存 * 2.按照自定义文件名保存 * ...
- 通过scrapy内置的ImagePipeline下载图片到本地、并提取本地保存地址
1.通过scrapy内置的ImagePipeline下载图片到本地 2.获取图片保存本地的地址 1.通过scrapy内置的ImagePipeline下载图片到本地 1)在settings.py中打开 ...
- scrapy中的ImagePipeline下载图片到本地、并提取本地的保存地址
通过scrapy内置到ImagePipeline下载图片到本地 在settings中打开 ITEM_PIPELINES的注释,并在这里面加入 'scrapy.pipelines.images.Imag ...
- Lrc歌词批量下载助手 MP3歌词批量下载助手
Lrc歌词批量下载助手 MP3歌词批量下载助手 易歌词的服务器已经挂掉,各个主流播放器已不提供明确的下载Lrc服务,当上G的MP3文件遇上苦逼的播放器,二缺就诞生了!本软件就是在这种背景下诞生的 ...
- 利用Node 搭配uglify-js压缩js文件,批量下载图片到本地
Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面 ...
- nodejs下载图片到本地,根据百度图片查找相应的图片,通过nodejs保存到本地文件夹
根据百度图片查找相应的图片:输入图片关键字,输入图片数量(默认是30条),通过nodejs将批量保存图片到本地文件夹. 代码已上传到github上:代码github的地址 下载后进去back-end: ...
- 利用node来下载图片到本地
本文是针对于知道图片地址的下载图片方法. 同时也是我的处男作(额,怪怪的〜);不要在意这些细节. 最近在弄项目迁移,需要把http的链接全换成https的:以前的cms不支持http的协议,然后就 ...
- URL地址下载图片到本地
package test.dao; import eh.base.dao.DoctorDAO; import eh.entity.base.Doctor; import junit.framework ...
随机推荐
- 为ScrollView增加圆角的三种方式,及自定义属性【在Linearlayout中新增ScrollView支持滚动 后续】
获取圆角的几种方案如下:方案一:通过shape来实现,给scrollView增加背景来实现方案二:通过自定义ScrollView,还要自定义属性,在dispatchDraw中不停的裁剪方案三:用And ...
- pwnable.kr之unlink
pwnable.kr之unlink 之前在看别的东西,学习的随笔也没有写完......颓了几天. 由于最近在看堆,就把pwnable.kr上unlink这道题做一下,学习一下. 1.程序分析 #inc ...
- SpringCloud升级之路2020.0.x版-12.UnderTow 简介与内部原理
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 在我们的项目中,我 ...
- View epub and mobi File on Linux
Calibre has stand-alone ebook viewer "ebook-viewer", start it in terminal: $ ebook-viewer ...
- MySQL-17-MHA高可用技术
环境准备 环境准备 至少准备3台独立的虚拟机数据库实例,建议4台 这里实验只准备3台,需要配置好 基于GTID的主从复制,具体怎么配置可以参看前面的章节 db01 10.0.0.51 主库 db02 ...
- ☕【Java技术指南】「并发原理专题」AQS的技术体系之CLH、MCS锁的原理及实现
背景 SMP(Symmetric Multi-Processor) 对称多处理器结构,它是相对非对称多处理技术而言的.应用十分广泛的并行技术. 在这种架构中,一台计算机由多个CPU组成,并共享内存和其 ...
- 常见web中间件漏洞(一)IIS漏洞
web中间件作为web安全的重要一块,经常会有人问balabala,虽然有很多已经人尽皆知并且基本不再构成威胁了,但是还是有必要说一下,了解历史,了解我们从哪里来 鉴于内容实在是太多,本来打算一起写完 ...
- VS+Qt+Halcon——显示图片,实现鼠标缩放、移动图片
摘要 本篇博文记录一下,用VS+Qt+Halcon实现对图片的读取以及鼠标缩放,移动(鼠标事件调用了halcon自带的算子)的过程.以及遇到的坑..... 先来看一下动态效果图: 主要控件: 添加一个 ...
- uwp 之后台音频
C# code 后台任务 ---------------------------- public sealed class BgTask : IBackgroundTask { #region 私有字 ...
- Spring详解(五)------面向切面编程
.AOP 什么? AOP(Aspect Oriented Programming),通常称为面向切面编程.它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的 ...