ASP.NET大文件上传

[ 2006-05-13 00:17:43 | 作者: admin ]
字号: | |
转自:http://blog.vckbase.com/wangjun/archive/2005/11/19/15055.html

感谢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);
               }
这样保存的文件名就不是乱码了。
[down=attachments/month_0605/jg9m_HttpUpload.rar]点击下载此文件[/down]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=568

浏览模式: 显示全部 | 评论: 1 | 引用: 3172 | 排序 | 浏览: 2745
引用 cyndy_li
[ 2014-07-15 11:48:32 ]
赞,为了赞下特意注册了账号,很有帮助。

此日志不可发表评论。