Maison >développement back-end >tutoriel php >PHP上传大文件
最近的项目需要上传大文件,我使用uploadify的flash上传,可是100多M就不行了。有没有什么更好的办法能支持传几百M、上G的大文件?
先用php内置的功能试试,传大文件时,要把php.ini 中memory_limit、max_file_uploads、post_max_size 的值改大一些,至少要大于你要上传的文件的大小。
最近的项目需要上传大文件,我使用uploadify的flash上传,可是100多M就不行了。有没有什么更好的办法能支持传几百M、上G的大文件?
这些参数都有调到很大了
那现在遇到什么问题??
那现在遇到什么问题??
问题就是uploadify上传100多M的文件会失败。您用过uplodify么?
最近的项目需要上传大文件,我使用uploadify的flash上传,可是100多M就不行了。有没有什么更好的办法能支持传几百M、上G的大文件? 这个需求需要借助于第三方控件来实现。uploadify或者其它的jqueyr,flash方式都无法传100MB的文件,甚至几十MB的文件都无法上传。
最近的项目需要上传大文件,我使用uploadify的flash上传,可是100多M就不行了。有没有什么更好的办法能支持传几百M、上G的大文件? 需要使用控件来传大文件。
你可以看下QQ邮箱,163邮件,DBank网盘,115网盘,360网盘,百度网盘,他们都是使用控件来实现的。普通的Flash或者form方式是无法实现100MB文件上传的。而且由于客户网络环境并不稳定,所以有可能在上传过程中出现网络错误导致上传失败的问题。
最近的项目需要上传大文件,我使用uploadify的flash上传,可是100多M就不行了。有没有什么更好的办法能支持传几百M、上G的大文件? 网上有一个Web超大文件上传断点续传控件: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
支持浏览器:Internet Explorer 6,Internet Explorer 7,Internet Explorer 8,Internet Explorer 9
Maxthon(遨游)1.x,Maxthon(遨游)2.x,TT浏览器,QQ浏览器,360安全浏览器,
Chrome(Google浏览器),Maxthon3.x,360极速浏览器6.x,Firefox
粘贴文件,简化选择文件操作:
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
与Discuz!X2整合-后台安装断点续传控件
与Discuz!X2整合-后台启用断点续传控件
与Discuz!X2整合-后台断点续传控件启用成功
与Discuz!X2整合-前台发帖页面
与Discuz!X2整合-上传
页面调用示例代码:
<!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title> <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/> <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script> <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script> <script language="javascript" type="text/javascript"> var cbItemLast = null; var cbMgr = new CombinBoxMgr(); $(document).ready(function() { cbMgr.LoadInControl("FilePanel"); cbMgr.Init(); }); </script></head><body> <div id="FilePanel"></div></body></html>
先用php内置的功能试试,传大文件时,要把php.ini 中memory_limit、max_file_uploads、post_max_size 的值改大一些,至少要大于你要上传的文件的大小。 php内置功能最多只能上传十几MB的文件,如果是局域网的项目,使用PHP内置功能或许可以上传几十MB的文件。但是100MB的文件是不能成功的。非常容易产生错误。
如果用户上传100MB的文件,上传到50MB时,网络错误,那就白传了。
Xproer.HttpUploader5: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
支持浏览器:Internet Explorer 6,Internet Explorer 7,Internet Explorer 8,Internet Explorer 9
Maxthon(遨游)1.x,Maxthon(遨游)2.x,TT浏览器,QQ浏览器,360安全浏览器,
Chrome(Google浏览器),Maxthon3.x,360极速浏览器6.x,Firefox
粘贴文件,简化选择文件操作:
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
与Discuz!X2整合-后台安装断点续传控件
与Discuz!X2整合-后台启用断点续传控件
与Discuz!X2整合-后台断点续传控件启用成功
与Discuz!X2整合-前台发帖页面
与Discuz!X2整合-上传
页面调用示例代码:
<!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title> <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/> <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script> <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script> <script language="javascript" type="text/javascript"> var cbItemLast = null; var cbMgr = new CombinBoxMgr(); $(document).ready(function() { cbMgr.LoadInControl("FilePanel"); cbMgr.Init(); }); </script></head><body> <div id="FilePanel"></div></body></html>
Xproer.HttpUploader5: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
支持浏览器:Internet Explorer 6,Internet Explorer 7,Internet Explorer 8,Internet Explorer 9
Maxthon(遨游)1.x,Maxthon(遨游)2.x,TT浏览器,QQ浏览器,360安全浏览器,
Chrome(Google浏览器),Maxthon3.x,360极速浏览器6.x,Firefox
页面调用示例代码:
<!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title> <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/> <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script> <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script> <script language="javascript" type="text/javascript"> var cbItemLast = null; var cbMgr = new CombinBoxMgr(); $(document).ready(function() { cbMgr.LoadInControl("FilePanel"); cbMgr.Init(); }); </script></head><body> <div id="FilePanel"></div></body></html>
在实际网络环境中一般30MB左右的文件都需要借助于控件来实现。一方面是因为国内的网络环境不太稳定,另一方面是从服务器的负载方面考虑。
一般情况下我们的网站用户有的可能用的电信的网络,有的用的是联通的网络,有的是用的教育网,有的在南有的在北,这种复杂的网络环境导致他们访问网站的速度是不同的。有的用户网速快,比如电信的用户访问电信的机房肯定快,他上传大文件可能没有问题。但是联通的访问电信的机房可能就慢了,他上传大文件可能就出现上传超时,掉线等问题。
服务器负载的问题,现在普通的文件上传技术对服务端带来的压力还是非常大的。普通的HTML上传1G的文件,服务端需要先分配1G的内存,然后开个长连接一直等待客户上传完毕。在这个期间如果有其它的用户也要上传1G的文件,那么服务端就再分配1G的内存。可以想象如果用户多了,那服务器肯定扛不住挂扯。就算是用Flash也一样,比如swfupload还有其它的几个Flash控件,他们使用的技术还是和普通的HTML一样。
腾迅他们正是考虑了这个问题,所以使用控件来解决这个问题。他们通过控件将一个大文件,比如1G划分成许多的小块,每一小块大约是128KB,然后循环上传,直到上传完。这样做的优点就是减轻了服务端的压力,提高了服务端的负载能力,使得服务端能够处理的用户请求数多了。也节省了成本。
Xproer.HttpUploader5: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
支持浏览器:Internet Explorer 6,Internet Explorer 7,Internet Explorer 8,Internet Explorer 9
Maxthon(遨游)1.x,Maxthon(遨游)2.x,TT浏览器,QQ浏览器,360安全浏览器,
Chrome(Google浏览器),Maxthon3.x,360极速浏览器6.x,Firefox
页面调用示例代码:
<!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title> <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/> <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script> <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script> <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script> <script language="javascript" type="text/javascript"> var cbItemLast = null; var cbMgr = new CombinBoxMgr(); $(document).ready(function() { cbMgr.LoadInControl("FilePanel"); cbMgr.Init(); }); </script></head><body> <div id="FilePanel"></div></body></html>
直接下载一个第三方的下载控件,不是很方便的。
请教一下出现这个问题是什么原因
谢谢,谢谢各位!