java实现批量下载

liangqun2013 2014-11-04 01:05:20
大家好,有这么个需求。前台页面有多个多选框,用户选定那几个,就下载这几个。注:不是打包下载,是一个一个下载。下面的代码是单独下载一个文件的时候,多个文件的话请问大家怎么实现,前台要怎么传参数,而且一个request对应一个response,前台只执行一次,怎么让后台多次执行?
String fileName = request.getParameter("fileName");
response.setContentType("application/OCTET-STREAM;charset=UTF-8");
response.setHeader("Content-Dispositon", "attachment;filename="+fileName);
String path = "E:\\file";
File file = new File(path,fileName);
FileInputStream fis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream(file);
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
int len;
while((len=fis.read(buffer))!=-1){
bos.write(buffer,0,len);
bos.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
fis.close();
bos.close();
}

...全文
1169 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39050244 2017-07-27
  • 打赏
  • 举报
回复
那插件怎么用啊 求告知
a277632346 2017-04-20
  • 打赏
  • 举报
回复
批量下载问题楼主解决了吗?
liangqun2013 2014-11-04
  • 打赏
  • 举报
回复
引用 5 楼 zstaogangt 的回复:
[quote=引用 楼主 liangqun2013 的回复:] 大家好,有这么个需求。前台页面有多个多选框,用户选定那几个,就下载这几个。注:不是打包下载,是一个一个下载。下面的代码是单独下载一个文件的时候,多个文件的话请问大家怎么实现,前台要怎么传参数,而且一个request对应一个response,前台只执行一次,怎么让后台多次执行?
String fileName = request.getParameter("fileName");
		response.setContentType("application/OCTET-STREAM;charset=UTF-8");
		response.setHeader("Content-Dispositon", "attachment;filename="+fileName);
		String path = "E:\\file";
		File file = new File(path,fileName);
		FileInputStream fis = null;
		BufferedOutputStream bos = null;
		try {
			fis = new FileInputStream(file);
			bos = new BufferedOutputStream(response.getOutputStream());
			byte[] buffer = new byte[1024];
			int len;
			while((len=fis.read(buffer))!=-1){
				bos.write(buffer,0,len);
				bos.flush();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			fis.close();
			bos.close();
		}
楼主试试这个控件:http://www.cnblogs.com/xproer/archive/2011/03/26/1996322.html 默认界面 批量下载中 下载中... 下载完毕 示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>HTTP文件下载控件演示页面</title>
    <link type="text/css" href="HttpDownloader/HttpDownloader.css" rel="Stylesheet"/>
    <script type="text/javascript" src="HttpDownloader/HttpDownloader.js" charset="utf-8"></script>
</head>
<body>
<input type="button" value="下载测试文件" onclick="StartDown()" />
<div id="downDiv"></div>
    <script type="text/javascript" language="javascript">
    	var downerMgr = new FileDownloaderMgr();
    	downerMgr.Config["Folder"] = "F:\\";
    	downerMgr.LoadTo("downDiv");

		window.onload = function()
		{
			downerMgr.Init();
		};
		
		function StartDown()
		{
			//添加到下载队列
			downerMgr.AddFile("http://www.ncmem.com/images/ico-ftp.jpg");
			downerMgr.PostFirst();
		}

		function copyFile()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.CopyFile("f:\\ftp\\test.gif","f:\\ftp\\test1.gif");
		}

		function copyFolder()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.CopyFile("f:\\ftp\\test.gif","f:\\ftp\\ftp1");
		}
		
		function moveFile()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.MoveFile("f:\\ftp\\test.gif","f:\\ftp\\test2.gif");
		}
		
		function moveFolder()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.MoveFile("f:\\ftp\\test2.gif","f:\\ftp\\ftp1");
		}
		
	</script>
	<input type="button" value="复制到文件" onclick="copyFile()" />
	<input type="button" value="复制到文件夹" onclick="copyFolder()" />
	<input type="button" value="移动文件" onclick="moveFile()" />
	<input type="button" value="移动到文件夹" onclick="moveFolder()" />
</body>
</html>
资源下载: cab安装包(x86) cab安装包(x64) xpi安装包 crx安装包 exe安装包 开发文档 根证书 示例下载: asp.net示例 jsp-access示例 jsp-mysql示例 jsp-oracle示例 jsp-sql示例 php示例[/quote] 用的话还得花钱买是吗?
sanweri 2014-11-04
  • 打赏
  • 举报
回复
引用 5 楼 zstaogangt 的回复:
楼主试试这个控件:http://www.cnblogs.com/xproer/archive/2011/03/26/1996322.html 默认界面 批量下载中 下载中... 下载完毕 示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>HTTP文件下载控件演示页面</title>
    <link type="text/css" href="HttpDownloader/HttpDownloader.css" rel="Stylesheet"/>
    <script type="text/javascript" src="HttpDownloader/HttpDownloader.js" charset="utf-8"></script>
</head>
<body>
<input type="button" value="下载测试文件" onclick="StartDown()" />
<div id="downDiv"></div>
    <script type="text/javascript" language="javascript">
    	var downerMgr = new FileDownloaderMgr();
    	downerMgr.Config["Folder"] = "F:\\";
    	downerMgr.LoadTo("downDiv");

		window.onload = function()
		{
			downerMgr.Init();
		};
		
		function StartDown()
		{
			//添加到下载队列
			downerMgr.AddFile("http://www.ncmem.com/images/ico-ftp.jpg");
			downerMgr.PostFirst();
		}

		function copyFile()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.CopyFile("f:\\ftp\\test.gif","f:\\ftp\\test1.gif");
		}

		function copyFolder()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.CopyFile("f:\\ftp\\test.gif","f:\\ftp\\ftp1");
		}
		
		function moveFile()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.MoveFile("f:\\ftp\\test.gif","f:\\ftp\\test2.gif");
		}
		
		function moveFolder()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.MoveFile("f:\\ftp\\test2.gif","f:\\ftp\\ftp1");
		}
		
	</script>
	<input type="button" value="复制到文件" onclick="copyFile()" />
	<input type="button" value="复制到文件夹" onclick="copyFolder()" />
	<input type="button" value="移动文件" onclick="moveFile()" />
	<input type="button" value="移动到文件夹" onclick="moveFolder()" />
</body>
</html>
资源下载: cab安装包(x86) cab安装包(x64) xpi安装包 crx安装包 exe安装包 开发文档 根证书 示例下载: asp.net示例 jsp-access示例 jsp-mysql示例 jsp-oracle示例 jsp-sql示例 php示例
不错,挺好用,界面也挺有美感,感谢分享
nmeniagaid 2014-11-04
  • 打赏
  • 举报
回复
引用 5 楼 zstaogangt 的回复:
Xproer.HttpDownloader:http://www.cnblogs.com/xproer/archive/2011/03/26/1996322.html 示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>HTTP文件下载控件演示页面</title>
    <link type="text/css" href="HttpDownloader/HttpDownloader.css" rel="Stylesheet"/>
    <script type="text/javascript" src="HttpDownloader/HttpDownloader.js" charset="utf-8"></script>
</head>
<body>
<input type="button" value="下载测试文件" onclick="StartDown()" />
<div id="downDiv"></div>
    <script type="text/javascript" language="javascript">
    	var downerMgr = new FileDownloaderMgr();
    	downerMgr.Config["Folder"] = "F:\\";
    	downerMgr.LoadTo("downDiv");

		window.onload = function()
		{
			downerMgr.Init();
		};
		
		function StartDown()
		{
			//添加到下载队列
			downerMgr.AddFile("http://www.ncmem.com/images/ico-ftp.jpg");
			downerMgr.PostFirst();
		}

		function copyFile()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.CopyFile("f:\\ftp\\test.gif","f:\\ftp\\test1.gif");
		}

		function copyFolder()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.CopyFile("f:\\ftp\\test.gif","f:\\ftp\\ftp1");
		}
		
		function moveFile()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.MoveFile("f:\\ftp\\test.gif","f:\\ftp\\test2.gif");
		}
		
		function moveFolder()
		{
			var obj = new ActiveXObject(downerMgr.ActiveX["Partition"]);
			obj.MoveFile("f:\\ftp\\test2.gif","f:\\ftp\\ftp1");
		}
		
	</script>
	<input type="button" value="复制到文件" onclick="copyFile()" />
	<input type="button" value="复制到文件夹" onclick="copyFolder()" />
	<input type="button" value="移动文件" onclick="moveFile()" />
	<input type="button" value="移动到文件夹" onclick="moveFolder()" />
</body>
</html>
资源下载: cab安装包(x86) cab安装包(x64) xpi安装包 crx安装包 exe安装包 开发文档 根证书 示例下载: asp.net示例 jsp-access示例 jsp-mysql示例 jsp-oracle示例 jsp-sql示例 php示例
这个不错。收下了,谢谢。 最近公司在做一个云存储项目,正好也有这个需求。
V08S20 2014-11-04
  • 打赏
  • 举报
回复
建议使用插件来实现。普通JS,JQUERY不好实现。
z1ootwo 2014-11-04
  • 打赏
  • 举报
回复
引用 楼主 liangqun2013 的回复:
大家好,有这么个需求。前台页面有多个多选框,用户选定那几个,就下载这几个。注:不是打包下载,是一个一个下载。下面的代码是单独下载一个文件的时候,多个文件的话请问大家怎么实现,前台要怎么传参数,而且一个request对应一个response,前台只执行一次,怎么让后台多次执行?
String fileName = request.getParameter("fileName");
		response.setContentType("application/OCTET-STREAM;charset=UTF-8");
		response.setHeader("Content-Dispositon", "attachment;filename="+fileName);
		String path = "E:\\file";
		File file = new File(path,fileName);
		FileInputStream fis = null;
		BufferedOutputStream bos = null;
		try {
			fis = new FileInputStream(file);
			bos = new BufferedOutputStream(response.getOutputStream());
			byte[] buffer = new byte[1024];
			int len;
			while((len=fis.read(buffer))!=-1){
				bos.write(buffer,0,len);
				bos.flush();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			fis.close();
			bos.close();
		}
貌似使用控件比较容易实现。 如果是普通的JSP+HTML,只能打包。
activexme 2014-11-04
  • 打赏
  • 举报
回复
这个需求可能需要使用控件来实现。像QQ邮箱里面是调用的QQ旋风。现在改为了QQ下载助手。360网盘是直接打的包。百度是直接调用的百度云网盘。
zqjer2 2014-11-04
  • 打赏
  • 举报
回复
前台传一个文件路径的集合或者文件的id的集合(用于查询该文件的路径),后台拿到这个操作获得list<文件路径>,然后遍历该list,针对每个list,生成一个线程 ,线程里面的内容就是调用单个文件下载的方法,就会出现n个下载窗口了。
中琦 2014-11-04
  • 打赏
  • 举报
回复
for 循环呗。。 循环一次。拿一次地址,下下来就OK 。
liangqun2013 2014-11-04
  • 打赏
  • 举报
回复

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧