王骏的BLOG
编程、网络技术点滴...
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
公告

留言簿(24)

随笔分类

随笔档案

文章分类

文章档案

相册

WEB开发

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-61 文章-5 评论-246 Trackbacks-0

感谢Chris Hynes提供了通过HttpModule(Krystalware.HttpUploadManager)实现 ASP.NET大文件上传的代码:
下载HttpUpload 
(其中HttpUploadSpike.rar是  ASP.NET大文件上传开源版本[有一些小BUG,修改方法见下文]
SlickUpload-2.5.2.rar是 ASP.NET大文件上传最新的非开源版本)

使用Chris Hynes提供的代码进行大文件上传非常方便,但在使用过程中发现几个小问题,解决后给大家作个参考。

一、中途取消时CPU占用过高

上传的时候如果中途取消,w3wp进程占用CPU一直100%,经过跟踪发现
MultipartParser.cs中几处地方有问题:

1)ReadFile中处理Stream.Read的返回值
只处理出错返回-1的情况,没有处理到达流末尾返回0的情况

protected bool ReadFile(FilePart p)
{
    
    
// while (read != -1)
    
// 改为:
    while (read > 0)
    
{
    
    }

}

2)ReadLine中处理Stream.ReadByte的返回值
当到达流末尾ReadByte返回-1
ReadLine(Stream s)
{
    
    
int rcv = s.ReadByte();
    
if(rcv == -1)
        
break;

    
char current = (char)rcv;
    
}

二、中文文件名乱码
原来的代码在处理HTTP头的时候未考虑编码,我参考“天下“先生的代码修改ReadLine如下:
protected string ReadLine(Stream s)
        
{
            
byte[] tempValues = new byte[2048];
            
int i = 0;
            
while(i < 2048)
            
{
                
int rcv = s.ReadByte();
                
if(rcv == -1)
                    
break;

                
byte current = (byte)rcv;
                
if(current != '\r' && current != '\n')
                
{
                    tempValues[i] 
= current;
                    i
++;
                }

                
else
                
{
                    
if (current == '\r')
                        s.ReadByte();

                    
break;
                }

            }


            
byte[] newValues = new byte[i];
            Array.Copy(tempValues, newValues, (
long)i);
            
return Encoding.Default.GetString(newValues);
        }

这样保存的文件名就不是乱码了。
posted on 2005-11-19 13:13 王骏的BLOG 阅读(10113) 评论(56)  编辑 收藏
Comments
  • # re: ASP.NET大文件上传
    zhbf@nje.cn
    Posted @ 2006-03-11 14:46
    好像还是有问题噢,大文件上传到结束时特慢。
  • # re: ASP.NET大文件上传
    wangjun
    Posted @ 2006-03-14 17:07
    正常的,大文件从临时目录拷贝拷贝过来需要一定的时间。
  • # re: ASP.NET大文件上传
    Magic
    Posted @ 2006-03-25 17:34
    能改完后发一份给我吗?我现在都是用2005的.2003编译不了.谢谢了.

    rwj_ly@126.com
  • # re: ASP.NET大文件上传
    数据恢复
    Posted @ 2006-03-29 23:32
    能改完后发一份给我吗?我现在都是用2005的.2003编译不了.谢谢了. 
  • # re: ASP.NET大文件上传
    gjx
    Posted @ 2006-07-25 11:31
    你好,能给我发一个正确的版本吗,谢谢
    gjx02@126.com
  • # re: ASP.NET大文件上传
    梧桐树
    Posted @ 2006-09-11 14:19
    加了处理乱码,  怎么老出现没有权限呢?
  • # re: ASP.NET大文件上传
    经理人
    Posted @ 2006-11-15 13:49
    谢谢也给我一份
  • # re: ASP.NET大文件上传
    月饼
    Posted @ 2006-11-15 13:49
    也给我一份,谢谢
  • # re: ASP.NET大文件上传
    kkk
    Posted @ 2006-11-15 16:58
    请给我一份,谢谢!!
    alazyman@126.com
  • # re: ASP.NET大文件上传
    xk
    Posted @ 2007-03-10 15:08
    我使用这个“return Encoding.Default.GetString(newValues);”也会出现乱码,,,最后改成
    “return Encoding.UTF8.GetString(newValues);”就可以了
  • # re: ASP.NET大文件上传
    runescape money
    Posted @ 2008-01-02 17:26
    good
  • # re: ASP.NET大文件上传
    runescape money
    Posted @ 2008-01-02 17:26
    good
  • # re: ASP.NET大文件上传
    runescape money
    Posted @ 2008-01-03 08:15
    <a href="http://www.u111.com/talent/model_view.php?talentnum=108002">http://www.u111.com/talent/model_view.php?talentnum=108002">陈楚生</a>">http://www.u111.com/talent/model_view.php?talentnum=108002">http://www.u111.com/talent/model_view.php?talentnum=108002">陈楚生</a>
    <a href=http://www.u111.com/talent/model_view.php?talentnum=108002">http://www.u111.com/talent/model_view.php?talentnum=108002>陈楚生</a>">http://www.u111.com/talent/model_view.php?talentnum=108002">http://www.u111.com/talent/model_view.php?talentnum=108002>陈楚生</a>
    [url=http://www.u111.com/talent/model_view.php?talentnum=108002">http://www.u111.com/talent/model_view.php?talentnum=108002]陈楚生[/url]
    http://www.u111.com/talent/model_view.php?talentnum=108002">http://www.u111.com/talent/model_view.php?talentnum=108002
    www.u111.com
  • # re: ASP.NET大文件上传
    网站建设
    Posted @ 2008-02-26 12:10
    谢谢 
  • # re: ASP.NET大文件上传
    北京网站建设
    Posted @ 2008-02-26 12:11
    不错
  • # re: ASP.NET大文件上传
    flp
    Posted @ 2008-02-28 08:50
    多个文件上传怎么搞呀, 谢谢!
  • # re: ASP.NET大文件上传
    龙在边缘
    Posted @ 2008-07-24 12:42
    好难修改啊,能给一个正确版的吗,260058135@qq.com 谢谢版主了!
  • # re: ASP.NET大文件上传
    raid服务器数据恢复
    Posted @ 2008-09-03 10:39
    支持一下,祝楼主越办越好!
  • # re: ASP.NET大文件上传
    上海国珍松花粉
    Posted @ 2008-09-03 10:41
    蛮热闹的嘛。..我也来踩踩 
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]