Home >Backend Development >PHP Tutorial >php大文件上传怎么实现的?

php大文件上传怎么实现的?

WBOY
WBOYOriginal
2016-06-23 14:39:28930browse

本帖最后由 xq_blessing 于 2012-06-25 09:01:11 编辑

如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~

回复讨论(解决方案)

PHP+flash 上传

就像youku一样的视频上传,是怎么实现的啊

upload_max_filesize 和 post_max_size 

http://www.howareyou.org.cn/?p=162

更改php.ini的相关参数,php中2G以 内文件还是可以的

不知道楼主要做什么样的站啊

使用flash吧  普通的做不了

如果,仅是部分内部人员,使用,直接开ftp.

支持ls的 太大的话 直接用ftp好些

如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~
传统的HTML方式已经难已满足超大文件的上传。别说是100MB,50MB对服务器来说都是非常大的,服务不仅要专门开一个链接等待这个文件上传完毕,还要分配同等大小姐的内存来保存这个文件对服务器来讲压力相当的大。就算是用Flash也不行,因为目前的Flash不支持断点续传操作,也不支持文件分块操作,Flash和传统的HTML方式上传原理一样。用Flash上传100MB图片,服务器也要分配100MB的内存。10个用户同时上传100MB数据的话,就要吃掉服务器1G的内存。
有些朋友试过用Flash文件上传控件来上传超大文件,但是经常遇到上传超时,或上传出错的问题。这是因为现在的Flash文件上传控件使用的技术还是和传统的HTML方式上传一样。没有使用分段上传技术,这种传统的HTML上传方式需要服务器必须开着一个SOCKET连接一直等到Flash上传完毕。这在大并发的情况下对服务器可能会造成非常大的压力,因为网站的访问量一大,用户上传的文件一多,服务器不可能为一个用户等很长时间。都是希望能够在最短的时间内处理完用户的请求。
像QQ邮箱中的超大附件上传功能,115网盘中的超大附件上传控件,华为网盘(DBank),金山快盘他们都是使用控件来实现超大文件上传功能的。这样做主要是减轻服务器压力,节省服务器内存,同时提高用户体验。

如果,仅是部分内部人员,使用,直接开ftp.

大部分人用也可以使用ftp. ftp可以安装扩展写脚本 支持数据库的. 当然就多了个安全隐患咯.

如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~
网上有一个Web大文件断点续传控件: http://www.cnblogs.com/xproer/archive/2012/05/29/2523757.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度:

文件MD5值计算完毕

服务器根据MD5检测是否存在相同文件

续传文件

从服务器加载文件列表

文件上传中

文件上传完毕

上传文件夹

与Discuz!X2整合-后台安装断点续传控件

与Discuz!X2整合-后台启用断点续传控件

与Discuz!X2整合-后台断点续传控件启用成功

与Discuz!X2整合-前台发帖页面

与Discuz!X2整合-上传


页面调用示例代码:
nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



    HTTP断点续传控件与MySQL数据库演示页面(UTF-8)
    
    <script></script>
    <script></script>
    <script></script>
    <script></script>
    <script> <br /> var cbItemLast = null; <br /> var cbMgr = new CombinBoxMgr(); <br /> <br /> $(document).ready(function() <br /> { <br /> cbMgr.LoadInControl("FilePanel"); <br /> cbMgr.Init(); <br /> }); <br /> </script>





资源下载:
CAB安装包
开发文档
  ASP.NET-ACCESS-GB2312示例
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP-MySQL-UTF8示例

引用楼主  的回复:
如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~

Xproer.HttpUploader4
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度:

文件MD5值计算完毕

服务器根据MD5检测是否存在相同文件

续传文件

从服务器加载文件列表

文件上传中

文件上传完毕

上传文件夹

与Discuz!X2整合-后台安装断点续传控件

与Discuz!X2整合-后台启用断点续传控件

与Discuz!X2整合-后台断点续传控件启用成功

与Discuz!X2整合-前台发帖页面

与Discuz!X2整合-上传


页面调用示例代码:

nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



    HTTP断点续传控件与MySQL数据库演示页面(UTF-8)
    
    <script></script>
    <script></script>
    <script></script>
    <script></script>
    <script> <br /> var cbItemLast = null; <br /> var cbMgr = new CombinBoxMgr(); <br /> <br /> $(document).ready(function() <br /> { <br /> cbMgr.LoadInControl("FilePanel"); <br /> cbMgr.Init(); <br /> }); <br /> </script>






资源下载:
CAB安装包
开发文档
ASP.NET-ACCESS-GB2312示例
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP-MySQL-UTF8示例
这个非常不错。

在实际网络环境中一般100MB左右的文件都需要借助于控件来实现。一方面是因为国内的网络环境不太稳定,另一方面是从服务器的负载方面考虑。
我们的网站用户有的可能用的电信的网络,有的用的是联通的网络,有的是用的教育网,有的在南有的在北,这种复杂的网络环境导致他们访问网站的速度是不同的。有的用户网速快,比如电信的用户访问电信的机房肯定快,他上传大文件可能没有问题。但是联通的访问电信的机房可能就慢了,他上传大文件可能就出现上传超时,掉线等问题。

服务器负载的问题,现在普通的文件上传技术对服务端带来的压力还是非常大的。普通的HTML上传1G的文件,服务端需要先分配1G的内存,然后开个长连接一直等待客户上传完毕。在这个期间如果有其它的用户也要上传1G的文件,那么服务端就再分配1G的内存。可以想象如果用户多了,那服务器肯定扛不住挂扯。就算是用Flash也一样,比如swfupload还有其它的几个Flash控件,他们使用的技术还是和普通的HTML一样。

腾迅他们正是考虑了这个问题,所以使用控件来解决这个问题。他们通过控件将一个大文件,比如1G划分成许多的小块,每一小块大约是128KB,然后循环上传,直到上传完。这样做的优点就是减轻了服务端的压力,提高了服务端的负载能力,使得服务端能够处理的用户请求数多了。也节省了成本。

必须用控件。。。

引用 12 楼  的回复:

引用楼主  的回复:
如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~

Xproer.HttpUploader4
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度:

文件MD5值计算完毕
……

其实已经脱离了Web,就一C/S了。

SOCKET 或 curl

这种 资源 很难让人直接上代码吧.

马克 12楼

引用 13 楼  的回复:

引用 12 楼  的回复:

引用楼主  的回复:
如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~

Xproer.HttpUploader4
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度……
貌似现在都是客户端和服务端结合了,对于用户来讲好用,易用最重要,即用户体验最重要。用户才不管你到底是C/S还是B/S,他就要实现这个功能,你用B/S做出来也行,用C/S做出来也行,只要能做出来。

我们从知名企业的做法上就能明白这个道理,QQ邮箱中的大附件上传控件也是用控件做的,QQ邮箱中的截屏功能也是用控件做的,QQ空间中相册里面的图片上传控件也是用控件做的。这些都是C/S。没几个用户关心是不是C/S,他们只在乎好不好用。

另外貌似QQ邮箱中的大附件上传控件帮助QQ赢得了不少的市场。当年腾迅刚推出这个功能时大伙都兴奋的不得鸟。感觉QQ邮箱为业界做了一件非常棒的事情,那个激动啊。

引用楼主  的回复:
如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~

网上有一个Web大文件断点续传控件:http://www.cnblogs.com/xproer/archive/2012/05/29/2523757.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文……

谢谢 辛苦了

引用楼主  的回复:
如题,视频网站想实现用户自己分享自己的视频(大小控制在1G以内)。

直接上代码就更感谢了~

传统的HTML方式已经难已满足超大文件的上传。别说是100MB,50MB对服务器来说都是非常大的,服务不仅要专门开一个链接等待这个文件上传完毕,还要分配同等大小姐的内存来保存这个文件对服务器来讲压力相当的大。就算是用Flash也不行,因为目前的Flash不支持断点续传操……

高手 学习了

感谢分享,如果那个控件HttpUploader5有用就太棒了

有无私的人没啊,大家一起学习交流啊

值得学习的东西太多了

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn