通过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 ...
随机推荐
- 解决:无法从 Windows 应用商店下载。请检查网络连接
今天在安装wsl的时候,装了几次一直中断,一直提示正在从Windows 应用商店下载,网络无法连接... 每次都是加载到2%就断了.网上搜了一圈,找到以下2种解决办法: 修改DNS把DNS修改为微软的 ...
- Python设计模式: 最佳的"策略"模式实践代码
Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...
- TextLineCodecFactory笔记
Mina的TextLineCodecFactory将字符串编码为字节流,将字节流解码为字符串,下面是使用中遇到的两个问题. TextLineCodecFactory改变了message的类型 acce ...
- NOIP 模拟 6 考试总结
T1 这道题是一道裸的暴力,考场写挂了 \(5pts\) 原因竟是忘了删注释,难受 题解 T2 这道题是一道启发式合并,没想出来,拿了个暴力分跑了 题解 T3 这道题就是一道数学期望,想出来就水得很, ...
- 9、二进制安装K8s之增加node
二进制安装K8s之增加node 1.复制文件,要部署几台就直接复制即可 #二进制文件 scp /data/k8s/bin/{kubelet,kube-proxy} root@192.168.100.1 ...
- ASP.NET Core:ASP.NET Core中使用NLog记录日志
一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...
- Windows下NodeJS安装与npm环境变量配置
node.js下载:https://nodejs.org/en/download/ 参考:https://www.jianshu.com/p/812de13f1276 1.安装过程基本直接" ...
- Qt简单的解析Json数据例子(一)
要解析的json的格式为: { "rootpath": "001", "usernum": 111, "childdep" ...
- SpringBoot快速入门(必知必会)
是什么?能做什么 SpringBoot必知必会 是什么?能做什么 SpringBoot是一个快速开发脚手架 快速创建独立的.生产级的基于Spring的应用程序 SpringBoot必知必会 快速创建应 ...
- io中的特殊流Properties
对于去年学习IO的时候一些代码贴上来: 初识properties,因为继承自hashtable,其中可以使用put操作: package special; import java.util.Prope ...