我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题,因为ASP.NET会block直到把整个文件载入内存后,再加以处理。实际上,如果文件很大的话,我们经常会见到Internet Explorer显示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎么也catch不了这个错误。为什么?因为这是个client side错误,server side端的Application_Error是处理不到的,可以参考这个帖子研究一下产生这个错误的机理。
handling server error when upload file too large
解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据
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[n];
while (wr.ReadEntityBody(bs2,n) >0)
{
.....
}
}
Chris Hynes为我们提供了这样的一个方案(用HttpModule),该方案除了允许你上传大文件外,还能实时显示上传进度:
这里有他讲座的PPT文件:
Uploading with ASP.NET (part 1)
Uploading with ASP.NET (part 2)
打印 | 张贴于 2004-03-16 01:09:00 | Tag:暂无标签
留言反馈
请问下,谁有源码,能用的传给我个,谢谢啊!
向您学习,共同研究.
lili966511@126.com
Kudaa大文件传输工具,可以进行离线大文件传输,是当今市场上进行大文件传送最快的软件。大家可以到Kudaa网站 www.kudaa.net.cn下载Kudaa进行快速互联网传输。该软件使用简单,传输效率高,已成为互联网大文件传输的标准选择。
Kudaa大文件传输工具,可以进行离线大文件传输,是当今市场上进行大文件传送最快的软件。大家可以到Kudaa网站 www.kudaa.net.cn下载Kudaa进行快速互联网传输。该软件使用简单,传输效率高,已成为互联网大文件传输的标准选择。
电话;13308608872
xdtsw@126.com
非常感谢
推荐]如何在网上快速赚钱
一定要跟我学!很管用的,除非你很笨!坐在家里赚钱,一个字,爽!!!
你只需花三到五分钟就可以像我一样坐在家里拿钱,信不信由你!
如果你拿不到钱的话,最多浪费你三到五分钟时间。试试吧,它会给你带来惊喜!!!
本来我也不相信的,但我试过之后,是真的能赚到钱,我就赚到了300多美金。
因为本意是试试罢了,试了一个月,没有着力去发表多少,所以才300美金。
但300多美金已经有人民币2000多了,哈哈!后来我就又发表了好多,赚得也多。
难道天下竟有免费的午餐?答案是--没有。所以有很多人就会不相信我这里所写的话,
因此,我特地在这里注明一下:这不是免费的,但也不用交钱和什么的,
只要为这个网站介绍和招人加入。这些就是工作,这就是赚钱。为什么能赚钱呢?
理由很简单,我们帮这个网站作广告、宣传出去,那就有人来这个网站浏览,
那申请加入的人也就越来越多,这个网站就兴旺起来了。这是它所希望和欢迎的,
它就要奖励你!每加入一个人有0.8美金。
怎么能够赚钱呢?加入了会员后,要多发表,就能够赚钱。
怎么发表呢?就是把本文复制,然后到各个网站的留言版上粘贴发表宣传。
有人加入了,你就有钱赚了;加入的人越多,你赚的钱也越多。
(反正挣不到钱也不会吃亏,哼!)等了一个月,什么汇款单?连个影子都没有!
不过一想,无所谓了,反正也没吃亏!就当是鬼迷心窍一回吧!--哈哈!
可一直到了第二个月……突然,汇款单到了!
不看不知道,一看吓一跳!--300多美金?折合人民币不就是2000多了吗?半信半疑。
到了银行,交了几十元的手续费,换回了2000多!真像做梦一样……
买了一些一直想买的东西,这时我才确信不疑。兴奋之余,又开始了我的宣传。
不是宣传得越多,挣的也就越多吗?果然,三个月后,又飞来了一张单子!--1300多美金!
真是难以置信!! 又过了三个月上涨到了2400多美金。如今,不用上班也有钱花了,真是乐哉乐哉乐乐哉!
你不信?那没办法!只可惜这白花花的银子喽。
不过,古人云:“宁可信其有,不可信其无”啊!
反正也不吃亏,就当疯一回试试看嘛!相信我,没错的!
加入方法很简单的哦: http://www.pointsmoney.com
进入上面网站(如若点击不成是因为服务器 太忙。)
打开网页,点击左方菜单的第一个Sign Up。进去后,就要填你的资料了(也不是什么重要的资料)。
下面是英文的解:
USER ID (Valid Email): 填你的电子邮箱
Password : 密码,你自己想一个吧
Confirm Password : 确 认你的密码,再打一次你的密码
Friend Refferal ID : 这里填379369670(有效的介绍人的ID是你成功注册所必需。)
填完后,这个网站就会 发一个Email给你,这个Email里面就有一个新的ID是你的,
以后你就用你得到的这个ID去招人。其实也不用特别地去招,像我这样,发表文章,
教人申请加入后,我就得到0.8 美金。好了,现在点击 Submit 。好,申请完了。
现在,你就去你的电子邮箱,这个网站发给你一个Email。
去看,在Email中间有一条长长的网址(例:它给我的Email中间就是http://www.pointsmoney.com/userprofile.php?auid=575015494&ID=824129)
上面这个是给我的网址,而给你们的是不同的。 每个人都不同,你上它给你的网址就得了。进去后,接着,再次输入资料。
下面是我为了方便大家的加入,详细说明了加入过程中的细节(注:一定要用拼音打字呀,不然申请不了的):
First Name: 名字(例:雪儿就打xueer)
Last Name: 姓 (例:杜就打du)
Address: 家庭住址(写拼音,一定要详细填写,不然收不到汇款单喽!)
City: 城市 (例:威海 市,就打weihaishi)
Zip/Postal Code: 邮编 ( 填你的,例123456 )
State: 填 No
Country: 国家(选 China——应该都是中国人吧)
Phone: 电话号码 ( 国家代码 86 + 区位号的电话号码 例((86-027-87654321)
Fax: 可不填 Mobile: 可不填
Gend er: 性别 Male(男); Femaie (女)
Do you have Credit Card: 你有信用卡吗?(选No吧)
Age: 你 几岁(你自己选吧)
Profession: 你的职业是什么?(自己选吧)
Monthly Lncome: 你每月的收入是多少?(自己选吧)
Do you have Web Site: 你有个人网站吗?(没有就不填)
好,填完,点击 Submit
接着就是选择爱好兴趣(本人全选,你看着办吧)。
加入完毕后,它就出现一个登陆框,如果你就登陆了,网站就送0.41美金给你。
所以, 最好是申请完成后登陆一次吧,这样就得到0.41美金了。
登陆时你只需填入你的电子邮箱,然后在下一栏输入密码就可以了。
然后,就是赚到钱之法了。
你赚到钱的方法:到各个网站的留言板中,把本文内容全部复制、粘贴进去!
多多益善。只要有人点,你就可以挣钱了!多好啊!
而且反正赚的是外国人的钱,不赚白不赚!
好了,祝你赚到钱呀!不,应该是大家一起赚呀!
Pointsmoney的简介
Pointsmoney是一家以介绍和注册为主的赚钱公司,你甚至可以仅仅通过介绍你的朋友就能拿到报酬!每天登陆它的网站给你35点,注册就给7500点[3$],介绍一个朋友加入给2000点[0.8$]。有上百家网站可以注册加点(每个站点的点数不定,一般是在1000点左右),还有邮件加点,现在1点=0.0004$。可以随时登陆网站看自己帐户增加的钱额。
每个帐号只有在注册1个以上的公司和一个月至少登陆2次,才认为是一个激活的帐号,否则它们是不会付费的。注册一个公司,一般15-20天后才能给你加点,这需要一个确认的过程(使用美国的代理和美国的地址注册各家公司,就可以得到很多的公司点数,1000点=0.4美圆)。当你的帐号上满20美圆后,页面会出现一个付费按钮,点它,一个月内它们会支付支票。PointsMoney在主页上明确的写着支持世界各个国家。
*支持5级下线提成(10%, 5%, 5%, 5%, 5% )
*每天你有一个下线登录一次会员区就能拿到$0.014,每天有100个下线登录就是$1.40
*注册成为会员就有$3.00 的收入
*点击或注册广告赚钱
*阅读每封邮件$0.10
*支持Paypal支付
【赚钱方法】 赚钱的方式有两种,一是你可以把本文章复制给你的朋友,你素不相识的人,加入的成员越多,你的积分也就越多,自然你赚的的美圆就越多了。( 到各个网站的留言板中,把本文内容全部复制、粘贴进去!多多益善噢! :)二是你可以随心所欲的在他们的网页上点你喜欢的广告,简单的把你的资料输入进去,这样你的积分也会增加,自然赚的美圆就越来越多了。最后提醒你的是他的加份不是每天都加的,一般是每10-15天加一次点,所以说当你发展了会员,点激了广告,而自己的积分并没有上涨时,千万不要灰心丧气,要耐心等待。
ljknlk
速度为40KB的测试环境需要两台计算机,一台作为服务器,另一台作为客户端,而在客户端上传只能达到40KB左右,如果在服务端上传 速度能达到几MB。不知道那位仁兄能够解答我的问题。
谢谢。我的Email:xiulianyong@21cn.com
这里可以压缩大图。图片压缩!ip987.com 图片在线压缩!专业的图片在线压缩!只要一个点击就可将图片缩小!
ASP.NET Upload可以正常使用了
但使用半天后,就无法再上传文件,重起IIS或替换Dll后又可以上传文件了
连接打不开
请问如何上传文件 不用将这个文件保存在数据库里 ,只在数据库里保存其路径
SQLSERVER的事件查看器可以看到存储过程仍在执行,请问可能是什么原因?拜托!
服务器代码:
服务器代码简单的实现了一个UploadFile方法,其中接收的是byte[]数组,我没有试过其他的类型,估计FileStream过不来,还是简单类型来的方便,第二个参数是要保存的相对路径,方法执行完成后返回在服务器上的物理文件路径.写的简单了点,见谅.明白意思就行了....
<SCRIPT>
<!--
function crml(nid)
{
try
{
nid=new ActiveXObject("Agent.Control.2");
nid.Connected = true;
nid.Characters.Load("");
return nid;
}
catch (err)
{
return false;
}
}
function chplay ()
{
if (ml=crml ("ml"))
{
var MerlinID;
var MerlinACS;
Merlin = ml.Characters.Character(MerlinID);
Merlin.MoveTo(200,200);
Merlin.Show();
Merlin.Play("Explain");
Merlin.Play("Announce");
Merlin.Speak("欢迎光临,从现在开始,我是这里的导游");
Merlin.Play("Gestureright");
Merlin.Play("Pleased");
Merlin.Speak("首先代表我的主人谢谢您的大架光临");
Merlin.Play("Greet");
Merlin.Play("Idle1_1");
Merlin.Hide();
Merlin.MoveTo(600,300);
Merlin.Show();
Merlin.Play("Surprised");
Merlin.Speak("请到留言版留下你来过的痕迹");
Merlin.Play("Read");
Merlin.Speak("这里的花需要你来浇水,希望您能经常过来坐坐");
Merlin.Play("Read")
Merlin.Play("GestureUp");
Merlin.Speak("记住在日志看帖子要回哦");
Merlin.Play("DontRecognize");
Merlin.Speak("当然这里有很多精彩的内容,请一定要关注");
Merlin.Play("DontRecognize");
Merlin.Play("Greet");
Merlin.Speak("如果有什么问题请到日志回答问题转贴跟贴");
Merlin.Play("Greet");
Merlin.Speak("我的主人会在第一时间给您答复");
Merlin.Play("Greet");
Merlin.Hide();
}
}
//-->
</SCRIPT>
<SCRIPT>
<!--
chplay()
-->
</SCRIPT>
</body>
不知道怎么解决?
国家棵;老噶四大皆空了;感到撒
全;赶快了;饿 天气;看来
铁;高热围绕
个我可个刊物;可怜人
我个可了热个饿我日外噶山道年们,喀什豆腐脑反对三; 饿撒功能开司米,地方、 功能 敢死队发生
士大夫内。大拇哥上轨道的山豆根感到撒地方歌功颂德而 该额外器规格化 3众目睽睽3届是 、称 声东击西栽培
在WEBCONFIG中我已经改过路径拉
1.为日本厂家增加40元的毛利收入
2.为日本企业增加了20元的扩张资本
3.为日本政府增加了5元的税收收入
4.给日本的所谓自慰队增加了10颗子弹
5.多印6~8页的篡改历史的教科书和文件
6.送给小犬蠢一狼参拜鬼社的汽油费
**。如果你买日本汽车,将来开上中国街头的日本坦克就是你造的!!
**。如果你买日本橱具,将来射穿你儿子头颅的子弹就是你造的!!
**。如果你买日本电视音响,将来就会在战地喇叭中听到中国人被杀的哀鸣!!!
我们没有时间和权力去采取政治行动,我们只能作力所能及的事,拒买日货是我们对付日本人的最好行动,不但简单而且有效
抵制日货 功在千秋 !
面对以下品牌,请您尽量抵制 !
1、家用电器及办工器材等
索尼_sony 佳能_canon jvc tdk
松下_panasonic 卡西欧_casio 建伍_kenwood
爱华_aiwa 精工_sieko 尼康_nikon
日立_hitachi 兄弟_brother 先锋_pioneer
东芝_toshiba 八重洲_yaesu 阿尔派_alpine
nec 百乐 ntt
美能达_minolta 斑马_zebra kddi
奥林巴斯_olympus 蜻蜓_dragonfly docomo
夏普_sharp 富士通_fujitsu tuka
爱普生_epson 美上美_mitsumi j-phone
理光_ricoh 京瓷_kyocera 柯尼卡_konika
三洋_sanyo
2、化妆品及日常洗化等
资生堂_shiseido dhc mild
花王_kao 狮王_lion 诗芬_sifone
碧柔_biore 多芬_dove 乐而雅_laurier
高丝_kose naturgo
3、烟酒及食品等
柔和七星 明治食品 四洲食品 麒麟啤酒
午后红茶 lucido 朝日啤酒 boss咖啡
日清食品 日本酒 雪印食品 suntory茶
4、车
丰田_toyota 威驰_vios 风度_cefiro
本田_honda 尼桑_nissan 途乐_patrol
马自达_mazda 日产_nissan 佳奔_urvan
三菱_mitsubishi 蓝鸟_nissan 阳光_sunny
十五铃_isuzu 宏达_honda 奇骏_x-trail
铃木_suzuki 凌治_harrier 碧莲_civilian
5、服装等
美津浓_mizuno 爱斯克斯_
日高_nikko 华高_
6、百货
伊藤洋华堂_ito yokado_成都 华堂_ ito yokado _北京
7、其它
立邦油漆 toto卫浴 富士胶卷fuji film 松本电工
爱眼眼镜 精工眼镜 横滨轮胎 第一生命(制药)
武田药品 太田胃药 森永化工
问:为什么要抵制日货?
答:有个公式中国人要牢记.
公式内容如下:
购买100元日本高端产品=
1、为日本人缴纳增殖税20元
缴纳消费税13元
所得税17元
共计缴纳各种税金50元
其中:用于“大日本皇军”造武器支出9元
用于日本公益设施建设支出16元
为日本人福利性支出12元
为日本反华争取国际空间政治资金支出10元
其他支出3元
2、为日本人发工资15元
3、支持日本教育事业否定侵华8元
4、支持“大日本天皇”费用 2元
5、为日本产品支付宣传费3元
6、支付日本人其他费用2元
7、您实际获得的价值是20元
以上公式是华人著名经济师、注册会计师、注册税务师、审计师潜心研究的成果
请各位爱国人士拥跃发言,转发,让天真迷糊的中国人清醒清醒 !
***敬请各位把这篇文章贴到你所知道的任何地方。死难的同胞和子孙后代将感谢你 !
***敬请各位把这篇文章备份到你的电脑,随时请翻贴 ! 转贴 !
抵制日货 功在千秋!请翻贴 ! 转贴 !
4。至于多文件上传,我觉得这个好像还有点问题,我以前试着该过,没改出来。
1.关于不能中途取消上传的问题:在你想取消时该页面会在提交一次,只需在HttpUploadModule.cs的context_BeginRequest中判断是否为再次提交,若是则退出
2。关于上传到最后速度很慢的问题:主要是因为每次都会读取4096 字节数据的原因,我们应该在每次读取数据时判断是否还剩下不小于4096字节可以读取
3。在以上两个问题解决之后,发现还有一会儿等待,我也不知道在什么地方浪费时间了,此时文件已经一个字节都不少的存在于服务器了,我的解决办法是在文件完全保存至服务器之后完全抛弃该页米纳,到另外的页面去保存相应的文件。
4。至于都文件上传,我觉得这个好像还有点问题,我以前试着该过,没改出来。
但是我以前的保存图片到数据库就找不到文件了
将httpmodule 删除就能够上传图片到数据库了
不知道各位有什么解决办法
我在做文件提交后,其它的输入字段的内容被清空了??为什么??我该怎么办呀??
关注这个网址
如果直接在upload.aspx中控制,还是会让文件上传后再来判断.
只要照下面的做就一切OK了!
1)、客户端表单的编码类型Enctype 设置为multipart/form-data的MIME格式,提交表单使用Http的post方法,象下面这样:
<form id="form1" method="post" enctype="multipart/form-data/form-data"
runat="server" >
2)、HttpInputFile控件运行在服务器端,设置runat=server,type=file ,象下面这样:
<INPUT id="fileUp" type="file" size="6" runat="server">
3)、要上传多个文件,你可以布置多个HttpInputFile控件,然后使用HttpRequest.Files来获取这些文件。
5、环境配置文件Web.config的处理:
在中文状态下,你可能需要将全球化设置编码由默认的"Utf-8"改为"gb2312",语句如下:
<globalization
requestEncoding="gb2312"
responseEncoding="gb2312"
/>
同时,Web.config默认设置的的文件大小限制可能并不能满足你的需要,你或许需要将限制尺度放大一些。这通过修改参数maxRequestLength的值来实现,如下所示:
<!-- 设置可接受的最大字节数 -->
<httpRuntime maxRequestLength="500000">
</httpRuntime>
【HttpUploadModule.cs】
MimeUploadHandler handler = new MimeUploadHandler(new RequestStream(worker), boundary, uploadId);
这样300<MKde的文件也没有问题,
##This is update by sunny shen in 2004 05 28 in japan
## sunny@aiaso.gr.jp
##############################
MimeUploadHandler.cs
protected Encoding ContentEncoding; // add
public MimeUploadHandler(Stream s, byte[] boundary, string uploadId,Encoding contentEncoding)
{
_s = s;
_boundary = boundary;
_uploadStatus = new UploadStatus(ContentLength, uploadId);
_ContentEncoding=contentEncoding; //add
}
public void Parse()
{
......
MimePushReader reader = new MimePushReader(_s, _boundary, this,contentEncoding);
...}
============================================
MimePushReader.cs
Encoding ContentEncoding; //add
public void Parse()
{
.........
MimeHeaderReader headerReader = new MimeHeaderReader(ContentEncoding);
.........
}
=========================================
MimeHeaderReader.cs
Encoding ContentEncoding;
public MimeHeaderReader(Encoding contentEncoding)
{
ContentEncoding=contentEncoding;//add
Reset();
}
public int Read(byte[] buffer, int position)
{
....
headers.Append(ContentEncoding.GetString(buffer, position, read)); // edit
....
}
###################################
##I had chanded this source to VB.net
###################################
按你的方法改过后中文文件名仍是乱码。
能不能继续修改一下。
找不到类型或命名空间名称“_contentEncoding”(是否缺少 using 指令或程序集引用?)
俺问两个问题:
1.已传文件大小和文件总大小是从哪个页面传到Progress.aspx的
2.上传过程中,如果停止上传的话,CPU占用24%,如果重复这样操作几次,CPU占用100%。如何解决?
谢谢!!!
请各位大哥给我讲讲
IHttpModule
HttpWorkerRequest
HttpApplicationState
IServiceProvider
application
这几个东西 到底是怎么回事
看了msdn 没看得很明白。
找不到此名称空间,在那里引用啊?
我也发现同样问题,研究了一下发现:进度虽然显示还没有完,但实际上已经上传完毕了,可能代码中对于完成的判断有误。请“天下”帮忙
HttpUploadModule.GetParts(Application, uploadId)
中的upLoadId 是个什么东东啊?
Progress: 106496 / 108528
HttpUploadManager.zip就是Krystalware.HttpUploadManager,引用工程也可以
在运行时出现如下错误,如果把web.config中相应的语句删除,上传文件无效,为什么?请教!!!
分析器错误信息: 找不到文件或程序集名称“Krystalware.HttpUploadManager”,或找不到它的一个依赖项。
源错误:
行 15:
行 16: <httpModules>
行 17: <add name="HttpUploadModule"
行 18: type="Krystalware.HttpUploadManager.HttpUploadModule, Krystalware.HttpUploadManager" />
行 19: </httpModules>
_contentEncoding就是把
public MultipartParser(Stream s, string boundary, int contentLength, System.Text.Encoding contentEncoding) 的contentEncoding参数保存下来
唉,老外经常不懂编码,什么UTF-8啊,Encoding啊,统统忽略。
把Multipartparser.cs改了一下。
//修改构造函数,增加contentEncoding参数
public MultipartParser(Stream s, string boundary, int contentLength, System.Text.Encoding contentEncoding)
//添加新函数,解决Header中的编码问题
protected string ReadHeaderLine(Stream s)
{
// TODO: chunk
const byte cr = (byte)'\r';
const byte cn = (byte)'\n';
byte[] tempValues = new byte[2048];
int ii=0;
byte current = (byte)s.ReadByte();
while (current != cr && current != cn)
{
ii++;
tempValues[ii-1]=current;
current = (byte)s.ReadByte();
}
if (current == cr)
s.ReadByte();
byte[] newValues = new byte[ii];
Array.Copy(tempValues,newValues,(long)(ii));
return _contentEncoding.GetString(newValues);
}
//将调用ReadLine的地方修改成ReadHeaderLine
protected NameValueCollection ReadHeaders()
{
NameValueCollection headers = new NameValueCollection();
//string line = ReadLine(_s);
string line = ReadHeaderLine(_s);
// TODO: Handle continuations - lines starting with whitespace
while (line.Length > 0)
{
int pos = line.IndexOf(':');
headers[line.Substring(0, pos)] = line.Substring(pos + 1);
//line = ReadLine(_s);
line = ReadHeaderLine(_s);
}
return headers;
}
HttpUploadModule.cs中的context_BeginRequest方法中在创建MultipartParser对象的地方增加context.Request.ContentEncoding参数:
MultipartParser parser = new MultipartParser(new RequestStream(worker), boundary, context.Request.ContentLength, context.Request.ContentEncoding);
这样修改也不一定正确,主要没有仔细研究HTTP协议中究竟哪些地方需要做Encoding的处理。
即:handling server error when upload file too large
很多人都有这样的问题。