断点上传单纯靠PHP 是做不了的.
因为普通的浏览器端没那功能.(上传的时候 还是会整个文件编码发送)
想实现的话 , 客户端需要插件了,
客户端可以使用flex实现. 服务端, PHP可以写个webservice 接受文件.
由于最近项目中遇到有做视频上传的功能,决定写一篇文章详细说明大文件上传的原理和使用Baidu WebFE(FEX)团队开发的文件上传插件WebUploader。
利用前端框架WebUploader配置进行对大文件的分片(由Baidu官方测试,每5M一个分片是效率最高的),这里,我的服务端是php,所以需要修改php.ini里面的post_max_size配置,默认是2M,我这里改的是8M。
服务端php接收分片,WebUploader插件会提供一个GUID,可以利用GUID加任意个性化信息做分片名(当然,分片序号需要加上),当所有分片上传完毕后,调用合并请求,对分片进行合并即可。
上传前,我会计算整个文件的MD5值到我们的资源库去查找是否已有相同资源,如果有的话,直接文件共享即可。
首先,我们需要创建对应的文件夹
其实服务端做的事情相对比较简单了,每上传的分片写到一个文件里去,最后把分片按照序号合并起来即可。
用户上传大文件的时候或多或少会有中断,断网的情况,这个时候服务器就会出现多的分片碎片,这个完全占用服务器存储空间的,所以我们需要对这些所谓的垃圾文件做处理,我们可以设置碎片文件的过期时间,如果超过时间还存在的话,进行删除,或者当天删除前一天的分片文件夹也是可以的,这样相对来说比较省事。
默认只能传最大 2M 的文件。不过,可以配置php.ini文件,修改上传文件大小的限制。
配置php.ini文件 (以上传500M以下大小的文件为例)
查找以下选项并修改->
file_uploads = On 打开文件上传选项
upload_max_filesize = 500M 上传文件上限
如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长
post_max_size = 500M post上限
max_execution_time = 1800 Maximum execution time of each script, in seconds脚本最大执行时间
max_input_time = 1800 Maximum amount of time each script may spend parsing request data
memory_limit = 128M Maximum amount of memory a script may consume (128MB)内存上限
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)