ASP.net 上传巨大文件续
再给100分 问题点数:100、回复次数:40Top
1 楼riding(ride)回复于 2006-03-20 13:15:24 得分 0
希望在这里跟贴!Top
2 楼sekone()回复于 2006-03-20 13:26:17 得分 1
不太清楚啊Top
3 楼zhtflhs(哼哼)回复于 2006-03-20 13:28:25 得分 1
不太容易!
帮顶!Top
4 楼fphuang(人在哈尔滨·四月)回复于 2006-03-20 13:36:53 得分 1
我感觉超过200M的就困难了,200M之内的都还可以Top
5 楼theodiact(theodiact)回复于 2006-03-20 13:39:28 得分 2
最简单的方法就是在WEB.CONFIG中将上传的文件大小改大,要不就是自己去重写HttpResponse的类,总之很麻烦的,用HTTP协议终究会有问题。FTP还可以考虑。网上这种文章特别多,可以自己去看看Top
6 楼bookshop(我是比儿(http://www.crossgo.com))回复于 2006-03-20 13:40:37 得分 0
文件太大的时候建议用控件来实现,不大的可以在web.config设置
Top
7 楼dnboy(computerboy)回复于 2006-03-20 13:47:03 得分 2
我用ASP.NET UPLOAD的Bestcomy.Web.Controls.Upload.dll组件,在XP下面能够上传,但是传到2003上面就不行了,文件是传到临时文件夹了,但在把文件转移到指定的地方的时候出错了.说什么没有设置对象的,然后他就把临时文件夹的给删除了,郁闷啊.不知道是不是File.MoveTo在2003上面不行还是怎么的?Top
8 楼kingwkb(烂皮鞋)回复于 2006-03-20 13:52:04 得分 2
重写httpWorkerRequest吧Top
9 楼TSD(智之选,商欲达--智商购物系统zhishop.com)回复于 2006-03-20 14:00:14 得分 0
文件这么为什么不用FTP上传呢?Top
10 楼TSD(智之选,商欲达--智商购物系统zhishop.com)回复于 2006-03-20 14:00:27 得分 0
文件这么大为什么不用FTP上传呢?
Top
11 楼flyinging(一路走来)回复于 2006-03-20 14:02:16 得分 1
思归里面有,把超时时间设的长一点就OKTop
12 楼Gerryjiang(下一站)回复于 2006-03-20 14:03:28 得分 0
太大文件最好用FTP,这样速度也会快且灵活Top
13 楼riding(ride)回复于 2006-03-20 15:24:00 得分 0
问题是:
看了思归的文章,
利用隐含的HttpWorkerRequest用它的GetPreloadedEntityBody 和 ReadEntityBody方法处理文件流
IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
int n = 1024;
byte[] bs2 = new byte;
while (wr.ReadEntityBody(bs2,n) >0)
{
.....
}
}
上面的代码一直不能完成。
1. wr.GetPreloadedEntityBody();有时返回是null,有时是7K的byte数组,怎么回事?
2. wr.ReadEntityBody(bs2,n) 为什么老返回0?
aspx的页面也相应的设置了 :
<form id="form1" runat="server" enctype="multipart/form-data" method="post" >
<input type="file" id="myFile" runat="server" style="width: 262px" />
为啥就不行呢?
给200分
Top
14 楼riding(ride)回复于 2006-03-20 15:27:13 得分 0
FTP肯定不行。一定用http的无组件上传!方案是定好的。只讨论怎么用技术实现。原来还说4G,结果一查IIS最大只支持2G.200M就太小了。1G的肯定多一些。Top
15 楼riding(ride)回复于 2006-03-20 15:29:16 得分 0
to kingwkb(烂皮鞋) :这可是最坏的打算。Top
16 楼windinwing(潇笑)回复于 2006-03-20 17:02:07 得分 1
我正在试,完了传上来看看Top
17 楼nswhy(南山翁)回复于 2006-03-20 17:38:05 得分 1
关注Top
18 楼nameone(过客)回复于 2006-03-20 19:08:30 得分 1
UPTop
19 楼kent3721(Kent)回复于 2006-03-20 19:17:20 得分 1
在web.config里修改限制。Top
20 楼luby(轻疯[在岁月无声的消逝里,轻轻的...我疯了。])回复于 2006-03-20 21:47:28 得分 1
这个问题要关注一下。Top
21 楼net_lover(【孟子E章】)回复于 2006-03-20 22:41:14 得分 0
上传大文件将大大降低服务器性能Top
22 楼wuyg(平平)回复于 2006-03-21 09:01:22 得分 0
如果允许用控件就简单了,实现断点续传的上载既可。
我觉得应该用户能够接受控件,毕竟上传这么大的文件,没有几个人有这个权限。控件就几个人安装,不会很麻烦。Top
23 楼hzgood(try again)回复于 2006-03-21 09:34:16 得分 1
哥们用ASP的无组件吧, 你还不需要因为.net1.1 到2.0 的变动而改变上传组件.Top
24 楼ghchen()回复于 2006-03-21 09:39:41 得分 0
我以前研究过一段时间不过没有搞懂,知道的大哥请出手吧Top
25 楼fangyifeng(想吃老虎的猪)回复于 2006-03-21 10:48:18 得分 0
我做过几个控件也是经不住大容量的文件上传,最多100多M,后来我在网上下了一个控件,具体不记得了,一个老外写的!Top
26 楼fangyifeng(想吃老虎的猪)回复于 2006-03-21 10:49:43 得分 2
这是个通用的问题,如果谁可以做出来后再公布源吗就好了呵呵,
那个老外写的我在以前的公司里面没拷出来!Top
27 楼zorou_fatal(The world and system is even)回复于 2006-03-21 10:51:20 得分 0
slickupload 上传的时候占用固定内存量Top
28 楼w6f3y0(王易)回复于 2006-03-21 11:43:55 得分 1
上传大文件这个问题要综合考虑问题(包括硬件,和软件,web服务器的性能,还有应),
1。从服务器的角度,我们通俗的说,web服务是一个应用进程,那么应用进程就要占用系统资源,其中包括内存,如果我们要让每个asp.net的进程都上传200M的话,那么它占用的内存也至少有200M,这样的进程在服务器上跑上5个的话就是1G(也就是说有5个用户同时都要上传文件的话,那么服务器就有1G的内存地址为.net准备),那么现在的主流pc_server也就是1G到2G,如果应用消耗系统资源>服务器资源,那么web服务器将会当机,所以,我个人认为,不是asp.net的设计者没有能力写出“上传大文件”的控件,而是他们不敢把这样的功能提供给程序员。
2。从网络的角度,我们知道,现在的都是基与tcp/ip 3 次握手的,如我们的网络不错的,比如一个网段内的计算机,我们就算ftp一个文件的话也得将近3~4分钟,何况我们要用应用 去传这样大得文件,就是说,如果你现在在一个网页中点击了一个上传的button,等了6 ~7分钟,都没有反映(要传200M的话,网络传输的时间很有可能是这么长的时间),用户是一个什么样的心态,
可能满头都是?????
3。从软件的角度,传这么大的文件是可以实现的,但必须要想别的办法,我前头作的时候,就是利用指针和数组。我首先用filestream.将客户端的文件进行分段,比如说4M,因为asp.net默认是最大传4M的附件,在将filestream分段传到服务器内存的数组里,在进行数组组装。然后在服务器上创件文件。 ok。完成,但也只能传80M左右的文件,在大的话,应用的耗时太长。用户可能不满意。代码是公司的。所以不好给大家看,只能和大家探讨一下原理。Top
29 楼wljsp(晓月轻风)回复于 2006-03-21 11:57:26 得分 0
非常关注.Top
30 楼LifeForCode(用生命编程.再入轮回(2007))回复于 2006-03-21 12:53:59 得分 0
严重关注Top
31 楼dh20156(风之石)回复于 2006-03-21 13:12:33 得分 0
关注学习。Top
32 楼nekiy(云淡风清)回复于 2006-03-21 13:18:41 得分 0
学习
我也想知道Top
33 楼lizi02(冬虫夏草)回复于 2006-03-21 21:37:43 得分 0
可以写个控件实现么?
决定延时太长的时候,如果没有进度条的话,没有多少人愿意等的Top
34 楼kiccleaf(凯晰叶子(http://www.openzj.com))回复于 2006-03-21 21:40:48 得分 0
这么大的文件,就用FTP上传多好!免得服务器当机掉了!这么大上传!Top
35 楼wuyg(平平)回复于 2006-03-21 21:49:39 得分 0
to w6f3y0(王易) :
如果是自己写控件,你没有考虑断点续传,传统的断点续传只支持下载,但只要允许写客户端控件,可以很容易实现断点续传的上载,这样无论多大的文件我都不怕,只怕操作系统的文件大小限制。Top
36 楼ruodeer(看我的个性签名都给我分)回复于 2006-03-21 22:31:55 得分 0
guanzhuTop
37 楼csxbbb(xiaoxiao)回复于 2006-03-21 23:14:28 得分 0
这里有个应用的例子(要登录。。。)
http://www.netyi.net/Member/uploadBook.aspxTop
38 楼freshman1995(出品)回复于 2006-03-23 10:10:18 得分 0
好像知道
大家说说需要学习什么基础知识呢Top
39 楼riding(ride)回复于 2006-03-23 15:12:07 得分 0
郁闷,结帖了。原来这段程序在httpModule内起作用。至于. wr.GetPreloadedEntityBody();有时返回是null,有时是7K的byte数组还是没搞明白。Top
40 楼zhurenweile(助人为乐)回复于 2006-04-05 12:04:19 得分 81
系统原因Top




