PHP大文件及断点续传下载实现代码


Posted in PHP onAugust 18, 2020

一般来说浏览器要同时下载几个文件,比如pdf文件,会在服务器端把几个文件压缩成一个文件。但是导致的问题就是会消耗服务器的cpu和io资源。

那有没有办法,用户点了几个文件,在客户端同时下载呢? 支持html5的浏览器是可以的,html的a标签有一个属性download

<a download="下载的1.pdf" href="1.pdf" rel="external nofollow" rel="external nofollow" >单个文件下载</a>, 经过测试在edge浏览器,firefox和chrome都支持。但是遗憾的是ie浏览器不支持。参考下面的例子。

<!DOCTYPE html>

<html>

<head>

	<meta charset="utf-8">

	<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

	<title></title>

	<script src="//libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>

</head>

<body>

	<input type="button" class="downloadAll"
	value="批量下载" />

	<script>
		var filesForDownload = [];
		filesForDownload[filesForDownload.length] = {
			path: "1.zip", //要下载的文件路径
			name: "file1.txt" //下载后要显示的名称
		};
		filesForDownload[filesForDownload.length] = {
			path: "2.zip",
			name: "file2.txt"
		};
		filesForDownload[filesForDownload.length] = {
			path: "3.zip",
			name: "file3.txt"
		};

		function download(obj) {
			var temporaryDownloadLink =
				document.createElement("a");
			temporaryDownloadLink.style.display =
				'none';
			document.body.appendChild(
				temporaryDownloadLink);
			temporaryDownloadLink.setAttribute(
				'href', obj.path);
			temporaryDownloadLink.setAttribute(
				'download', obj.name);
			temporaryDownloadLink.click();
			document.body.removeChild(
				temporaryDownloadLink);
		}
		$('input.downloadAll').click(function(
			e) {
			e.preventDefault();
			for (var x in filesForDownload) {
				download(filesForDownload[x]);
			}
		});
	</script>

</body>

</html>

ie浏览器怎么办呢? 也可以用window.open函数。

<!DOCTYPE html>

<html>

<head>

	<meta charset="utf-8">

	<title></title>

	<script src="//libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>

</head>

<body>

	<a download="下载的1.pdf" href="1.pdf" rel="external nofollow" rel="external nofollow" >单个文件下载</a>
	<br>

	<a href="#" rel="external nofollow" class="yourlink">下载全部文件</a>

	<script>
		$('a.yourlink').click(function(e) {
			e.preventDefault();
			window.open('1.zip', 'download');
			window.open('2.zip', 'download');
			window.open('3.zip', 'download');
		});
	</script>
</body>
</html>

完整的方案就是根据浏览器类型,调用不同的函数,实现。

另外要下载pdf,而不是在浏览器中打开的话,需要配置apache的配置文件,在httpd.conf中增加下面的配置。

<FilesMatch "\.pdf$">

Header set Content-Disposition attachment

</FilesMatch>

或者使用down2组件,下载更简单。

JavaScript:

引入头

<head>

	<metahttp-equiv="Content-Type" content="text/html; charset=utf-8"
	/>

	<title>donw2-多文件演示页面</title>

	<linktype="text/css" href="js/down.css" rel="external nofollow" rel="Stylesheet"
	/>

	<scripttype="text/javascript" src="js/jquery-1.4.min.js">
		</script>

		<scripttype="text/javascript" src="js/down.app.js"
		charset="utf-8">
			</script>

			<scripttype="text/javascript" src="js/down.edge.js"
			charset="utf-8">
				</script>

				<scripttype="text/javascript" src="js/down.file.js"
				charset="utf-8">
					</script>

					<scripttype="text/javascript" src="js/down.folder.js"
					charset="utf-8">
						</script>

						<scripttype="text/javascript" src="js/down.js"
						charset="utf-8">
							</script>

</head>

创建down2对象

var downer = new DownloaderMgr();
downer.Config["Folder"] = ""; //设置默认下载路径。
//挂载事件
downer.event.taskCreate = function(obj) {
	$(document.body).append("文件ID:" + obj
		.fileSvr.id) + "<br/>";
};
downer.event.downProcess = function(obj) {};
downer.event.downStoped = function(obj) {};
downer.event.downComplete = function(
	obj) {
	$(document.body).append('<div>本地路径:' +
		obj.fileSvr.pathLoc + '</div>');
};
downer.event.downError = function(obj,
	err) {};
downer.event.queueComplete = function() {
	$(document.body).append(
		"<div>队列完成</div>");
};

批量下载url

$("#btn-down-files").click(function() {
	if (downer.Config["Folder"] == "") {
		downer.open_folder();
		return;
	}
	var urls = [
		{
			fileUrl: "http://res2.ncmem.com/res/images/ie11.png"
		}
		, {
			fileUrl: "http://res2.ncmem.com/res/images/up6.1/down.png"
		}
		, {
			fileUrl: "http://res2.ncmem.com/res/images/firefox.png"
		}
		, {
			fileUrl: "http://res2.ncmem.com/res/images/edge.png"
		}
		, {
			fileUrl: "http://res2.ncmem.com/res/images/up6.1/cloud.png"
		}
		, {
			fileUrl: "http://res2.ncmem.com/res/images/home/w.png"
		}
		, {
			fileUrl: "http://res2.ncmem.com/res/images/img.png"
		}
	];
	downer.app.addUrls(urls);
});

当成一个文件夹下载

$("#btn-down-json").click(function() {
	if (downer.Config["Folder"] == "") {
		downer.open_folder();
		return;
	}
	var fd = {
		nameLoc: "图片列表"
		,
		files: [
			{
				fileUrl: "http://res2.ncmem.com/res/images/ie11.png"
			}
			, {
				fileUrl: "http://res2.ncmem.com/res/images/up6.1/down.png"
			}
			, {
				fileUrl: "http://res2.ncmem.com/res/images/firefox.png"
			}
			, {
				fileUrl: "http://res2.ncmem.com/res/images/edge.png"
			}
			, {
				fileUrl: "http://res2.ncmem.com/res/images/up6.1/cloud.png"
			}
			, {
				fileUrl: "http://res2.ncmem.com/res/images/home/w.png"
			}
			, {
				fileUrl: "http://res2.ncmem.com/res/images/img.png"
			}
		]
	};
	downer.app.addJson(fd);
});

下载多级目录

$("#btn-down-fd").click(function() {
	if (downer.Config["Folder"] == "") {
		downer.open_folder();
		return;
	}
	var fd = {
		nameLoc: "测试文件夹"
		,
		files: [
			{
				fileUrl: "http://www.ncmem.com/images/ico-ftp.jpg"
			}
			, {
				fileUrl: "http://www.ncmem.com/images/ico-up.jpg"
			}
		]
		,
		folders: [
			{
				nameLoc: "图片1"
				,
				files: [
					{
						fileUrl: "http://www.ncmem.com/images/ico-ftp.jpg"
					}
					, {
						fileUrl: "http://www.ncmem.com/images/ico-up.jpg"
					}
					, {
						fileUrl: "http://www.ncmem.com/images/ico-capture.jpg"
					}
					, {
						fileUrl: "http://www.ncmem.com/images/ico-imageuploader.gif"
					}
					, {
						fileUrl: "http://www.ncmem.com/images/ico-wordpaster.gif"
					}
				]
				,
				folders: [
					{
						nameLoc: "软件"
						,
						files: [
							{
								fileUrl: "http://res2.ncmem.com/res/images/edit-file.png"
							}
						]
					}
				]
			}
		]
	};
	downer.app.addJson(fd);
});

自定义下载文件名称

$("#btn-down-svr").click(function () {
  if (downer.Config["Folder"] == "") { downer.open_folder(); return; }
  var urls = [
    { fileUrl: "http://localhost:90/db/down.aspx", nameLoc: "test.exe" }
    , { fileUrl: "http://localhost:90/db/down.aspx", nameLoc: "test-1.exe" }
  ];
  downer.app.addUrls(urls);
});

实现效果:

PHP大文件及断点续传下载实现代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
模仿OSO的论坛(二)
Oct 09 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
php去除字符串换行符示例分享
Feb 13 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
php查询操作实现投票功能
May 09 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
Nginx+php配置文件及原理解析
Dec 09 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 #PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 #PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 #PHP
PHP unset函数原理及使用方法解析
Aug 14 #PHP
PHP常量及变量区别原理详解
Aug 14 #PHP
PHP获取当前时间不准确问题解决方案
Aug 14 #PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 #PHP
You might like
php中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python快速从注释生成文档的方法
2016/12/26 Python
python去除文件中重复的行实例
2018/06/29 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
python实现翻译word表格小程序
2020/02/27 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
岗位职责定义及内容
2013/11/08 职场文书
专科应届生求职信
2013/11/24 职场文书
小学毕业感言50字
2014/02/16 职场文书
装修协议书范本
2014/04/21 职场文书
服务承诺书范文
2014/05/19 职场文书
网络营销计划书
2015/01/17 职场文书
自考生自我评价
2019/06/21 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技