在ASP.NET上如何实现上传超过4G的文件
在ASP.NET上怎么实现上传超过4G的文件?
要做一个方法,功能是:
要上传大文件的,有可能是高清视频。
所以要求能支持4G以上的,只是用控件的话都要通过IIS,而IIS上传大小是有限制的,如果我要上传的话除了修改IIS的配置外还能怎么做?
用FTP的话可以直接在网页上调用吗?
用控件的话可以直接在后台调用吗?
这个方法有两个用途:
1.在网页上处理用户要上传的文件。
2.在后台上把文件转存(还是上传)到专门的服务器。
问:该怎么实现好?因为时间比较急,最好能给个实例,谢谢啦
------解决思路----------------------
搜索 WCF
------解决思路----------------------
try it:
http://www.cnblogs.com/insus/archive/2012/08/09/2629920.html
------解决思路----------------------
这个需求只能使用专门的控件来解决。普通HTTP FORM方式无论是ASP,ASP.NET,JSP,PHP都无法实现。比如QQ邮箱中的大附件上传功能,163邮箱中的大附件上传功能,百度网盘,360云盘,115网盘,他们都是使用控件来实现的。
------解决思路----------------------
传统的HTML上传方式难已满足超大文件的上传需求,因为使用传统HTML方式向服务器上传超大文件时,浏览器会建立一个连接,然后通过这个SOCKET连接向服务器POST数据。流程是没有问题,但是在国内由于许多地区的网络环境不稳定,同时速度也不快,这就导致浏览器建立的这个边接容易断开,或者是超时。比如你是广州联通网速是10KB/S,你向北京电信服务器上传数据,这速度肯定非常慢,因为跨网了,电信的网相互访问就快,而服务器不可能为你这一个用户等待这么长时间,因为这个连接资源是非常宝贵的。最好的方式是一个用户请求服务器只需要5秒,这样服务器的并发访问量才会比较大,同时能够处理的用户请求就越多。
第二个问题,如果用户上传1G的文件,现在已经上传了500MB,但是突然断网了,那么你让用户再重新上传前面的500MB吗?假设用户的网速是100KB/S,那么用户需要花1.4小时来重传前面的500MB。如果是这样的话,估记用户是无法接受的。
第三个问题,无论你是用原始HTML方式(即Form表单方式)上传还是使用Flash控件上传服务端都会分配一个与客户端相同大小的内存。比如用户上传的是1G,那么服务端就会分配1G内存,如果用户上传的是5G,那么服务端也会分配5G。那么假设10G个用户同时上传5G文件,那么服务端就需要至少50G内存。一般的服务端这时就会由于内存不足而崩溃掉。
------解决思路----------------------
在实际网络环境中一般30MB左右的文件都需要借助于控件来实现。一方面是因为国内的网络环境不太稳定,另一方面是从服务器的负载方面考虑。
一般情况下我们的网站用户有的可能用的电信的网络,有的用的是联通的网络,有的是用的教育网,有的在南有的在北,这种复杂的网络环境导致他们访问网站的速度是不同的。有的用户网速快,比如电信的用户访问电信的机房肯定快,他上传大文件可能没有问题。但是联通的访问电信的机房可能就慢了,他上传大文件可能就出现上传超时,掉线等问题。
服务器负载的问题,现在普通的文件上传技术对服务端带来的压力还是非常大的。普通的HTML上传1G的文件,服务端需要先分配1G的内存,然后开个长连接一直等待客户上传完毕。在这个期间如果有其它的用户也要上传1G的文件,那么服务端就再分配1G的内存。可以想象如果用户多了,那服务器肯定扛不住挂扯。就算是用Flash也一样,比如swfupload还有其它的几个Flash控件,他们使用的技术还是和普通的HTML一样。
腾迅他们正是考虑了这个问题,所以使用控件来解决这个问题。他们通过控件将一个大文件,比如1G划分成许多的小块,每一小块大约是128KB,然后循环上传,直到上传完。这样做的优点就是减轻了服务端的压力,提高了服务端的负载能力,使得服务端能够处理的用户请求数多了。也节省了成本。
------解决思路----------------------
网上有成熟的大文件上传控件,你可以搜一下。关键字:HTTP断点续传控件,Web大文件上传控件
------解决思路----------------------
用silverlight+wcf
------解决思路----------------------
用uploadify jquery+flash上传控件
并修改web.config
<httpRuntime maxRequestLength="20480000" executionTimeout="800000" requestValidationMode="2.0"/>
放到<system.web>里面
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576000"></requestLimits>
</requestFiltering>
</security>
放到 </system.webServer>里面,
这个是最关键的,如果不写这个即使配置上面也无法上传
本人亲测,给分结贴
------解决思路----------------------
一般是要分隔吧,我想是这样的。因为有时,大于4G的文件,有些系统不支持的。我不是牛人啊,只是自己的想法。
------解决思路----------------------
我用过两种第三方上传控件,都支持flash和html5运行时以及分块上传,不需要修改任何设置,它可以把文件截成好多小块上传,一次只上传一块,就象网络蚂蚁那样,在后台获取到上传的分块后再附加上即可,这两个上传组件是:plupload和webupload,前一个是老外做的,商业付费,第二个是百度团队开发的开源免费组件,推荐使用第二个: http://fex-team.github.io/webuploader/
------解决思路----------------------
这种业务都避不开2个问题,大文件上传和断点续传。
网上很多种控件,商业的,免费的都有,但是客户端量一单上来了你都伤不起,你带宽够用吗,随之而来付费是不可避免的。
1.自己搞:商业控件+专线,且大文件上传做成单独的服务部署
2.租用第三方平台
------解决思路----------------------
关键字:分块。
------解决思路----------------------
ASP.NET传送大文件示例
//修改Web.config文件中的最大上传容量和所相应的时间
<httpRuntime maxRequestLength="40960" executionTimeout="6000"/>
//上传事件
protected void btnSend_Click(object sender, EventArgs e)
{
try
{
//获取上传文件的名称
string upName = fupFileSend.FileName;
//获取上传文件的后缀名
string nameLast = upName.Substring(upName.LastIndexOf("."));
//修改上传文件的名称
string fileName = txtName.Text + nameLast;
//设置要保存的路径
string path = Server.MapPath("./")+"File"+ "\\" + fileName;
//将文件保存到指定路径下
fupFileSend.PostedFile.SaveAs(path);
RegisterStartupScript("true", "<script>alert('上传成功!')</script>");
}//codego.net/15/1/1/
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
RegisterStartupScript("true", "<script>alert('上传失败!')</script>");
}
}
要做一个方法,功能是:
要上传大文件的,有可能是高清视频。
所以要求能支持4G以上的,只是用控件的话都要通过IIS,而IIS上传大小是有限制的,如果我要上传的话除了修改IIS的配置外还能怎么做?
用FTP的话可以直接在网页上调用吗?
用控件的话可以直接在后台调用吗?
这个方法有两个用途:
1.在网页上处理用户要上传的文件。
2.在后台上把文件转存(还是上传)到专门的服务器。
问:该怎么实现好?因为时间比较急,最好能给个实例,谢谢啦
------解决思路----------------------
搜索 WCF
------解决思路----------------------
try it:
http://www.cnblogs.com/insus/archive/2012/08/09/2629920.html
------解决思路----------------------
这个需求只能使用专门的控件来解决。普通HTTP FORM方式无论是ASP,ASP.NET,JSP,PHP都无法实现。比如QQ邮箱中的大附件上传功能,163邮箱中的大附件上传功能,百度网盘,360云盘,115网盘,他们都是使用控件来实现的。
------解决思路----------------------
传统的HTML上传方式难已满足超大文件的上传需求,因为使用传统HTML方式向服务器上传超大文件时,浏览器会建立一个连接,然后通过这个SOCKET连接向服务器POST数据。流程是没有问题,但是在国内由于许多地区的网络环境不稳定,同时速度也不快,这就导致浏览器建立的这个边接容易断开,或者是超时。比如你是广州联通网速是10KB/S,你向北京电信服务器上传数据,这速度肯定非常慢,因为跨网了,电信的网相互访问就快,而服务器不可能为你这一个用户等待这么长时间,因为这个连接资源是非常宝贵的。最好的方式是一个用户请求服务器只需要5秒,这样服务器的并发访问量才会比较大,同时能够处理的用户请求就越多。
第二个问题,如果用户上传1G的文件,现在已经上传了500MB,但是突然断网了,那么你让用户再重新上传前面的500MB吗?假设用户的网速是100KB/S,那么用户需要花1.4小时来重传前面的500MB。如果是这样的话,估记用户是无法接受的。
第三个问题,无论你是用原始HTML方式(即Form表单方式)上传还是使用Flash控件上传服务端都会分配一个与客户端相同大小的内存。比如用户上传的是1G,那么服务端就会分配1G内存,如果用户上传的是5G,那么服务端也会分配5G。那么假设10G个用户同时上传5G文件,那么服务端就需要至少50G内存。一般的服务端这时就会由于内存不足而崩溃掉。
------解决思路----------------------
在实际网络环境中一般30MB左右的文件都需要借助于控件来实现。一方面是因为国内的网络环境不太稳定,另一方面是从服务器的负载方面考虑。
一般情况下我们的网站用户有的可能用的电信的网络,有的用的是联通的网络,有的是用的教育网,有的在南有的在北,这种复杂的网络环境导致他们访问网站的速度是不同的。有的用户网速快,比如电信的用户访问电信的机房肯定快,他上传大文件可能没有问题。但是联通的访问电信的机房可能就慢了,他上传大文件可能就出现上传超时,掉线等问题。
服务器负载的问题,现在普通的文件上传技术对服务端带来的压力还是非常大的。普通的HTML上传1G的文件,服务端需要先分配1G的内存,然后开个长连接一直等待客户上传完毕。在这个期间如果有其它的用户也要上传1G的文件,那么服务端就再分配1G的内存。可以想象如果用户多了,那服务器肯定扛不住挂扯。就算是用Flash也一样,比如swfupload还有其它的几个Flash控件,他们使用的技术还是和普通的HTML一样。
腾迅他们正是考虑了这个问题,所以使用控件来解决这个问题。他们通过控件将一个大文件,比如1G划分成许多的小块,每一小块大约是128KB,然后循环上传,直到上传完。这样做的优点就是减轻了服务端的压力,提高了服务端的负载能力,使得服务端能够处理的用户请求数多了。也节省了成本。
------解决思路----------------------
网上有成熟的大文件上传控件,你可以搜一下。关键字:HTTP断点续传控件,Web大文件上传控件
------解决思路----------------------
用silverlight+wcf
------解决思路----------------------
用uploadify jquery+flash上传控件
并修改web.config
<httpRuntime maxRequestLength="20480000" executionTimeout="800000" requestValidationMode="2.0"/>
放到<system.web>里面
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576000"></requestLimits>
</requestFiltering>
</security>
放到 </system.webServer>里面,
这个是最关键的,如果不写这个即使配置上面也无法上传
本人亲测,给分结贴
------解决思路----------------------
一般是要分隔吧,我想是这样的。因为有时,大于4G的文件,有些系统不支持的。我不是牛人啊,只是自己的想法。
------解决思路----------------------
我用过两种第三方上传控件,都支持flash和html5运行时以及分块上传,不需要修改任何设置,它可以把文件截成好多小块上传,一次只上传一块,就象网络蚂蚁那样,在后台获取到上传的分块后再附加上即可,这两个上传组件是:plupload和webupload,前一个是老外做的,商业付费,第二个是百度团队开发的开源免费组件,推荐使用第二个: http://fex-team.github.io/webuploader/
------解决思路----------------------
这种业务都避不开2个问题,大文件上传和断点续传。
网上很多种控件,商业的,免费的都有,但是客户端量一单上来了你都伤不起,你带宽够用吗,随之而来付费是不可避免的。
1.自己搞:商业控件+专线,且大文件上传做成单独的服务部署
2.租用第三方平台
------解决思路----------------------
关键字:分块。
------解决思路----------------------
ASP.NET传送大文件示例
//修改Web.config文件中的最大上传容量和所相应的时间
<httpRuntime maxRequestLength="40960" executionTimeout="6000"/>
//上传事件
protected void btnSend_Click(object sender, EventArgs e)
{
try
{
//获取上传文件的名称
string upName = fupFileSend.FileName;
//获取上传文件的后缀名
string nameLast = upName.Substring(upName.LastIndexOf("."));
//修改上传文件的名称
string fileName = txtName.Text + nameLast;
//设置要保存的路径
string path = Server.MapPath("./")+"File"+ "\\" + fileName;
//将文件保存到指定路径下
fupFileSend.PostedFile.SaveAs(path);
RegisterStartupScript("true", "<script>alert('上传成功!')</script>");
}//codego.net/15/1/1/
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
RegisterStartupScript("true", "<script>alert('上传失败!')</script>");
}
}