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]
感谢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: http://blog.xg98.com/feed.asp?q=comment&id=568
浏览模式: 显示全部 |
评论: 1 |
引用: 3172 | 排序 | 浏览: 2744
cyndy_li
[ 2014-07-15 11:48:32 ]
赞,为了赞下特意注册了账号,很有帮助。
此日志不可发表评论。