{
//订阅事件
application.BeginRequest += new EventHandler(this.Application_BeginRequest);
}
public void Dispose()
{
}
private void Application_BeginRequest(Object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
HttpWorkerRequest request = GetWorkerRequest(app.Context);
Encoding encoding = app.Context.Request.ContentEncoding;
int bytesRead = 0; // 已读数据大小
int read; // 当前读取的块的大小
int count = 8192; // 分块大小
byte[] buffer; // 保存所有上传的数据
if (request != null)
{
// 返回 HTTP 请求正文已被读取的部分。
byte[] tempBuff = request.GetPreloadedEntityBody(); //要上传的文件
// 如果是附件上传
if (tempBuff != null && IsUploadRequest(app.Request)) //判断是不是附件上传
{
// 获取上传大小
//
long length = long.Parse(request.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength));
buffer = new byte[length];
count = tempBuff.Length; // 分块大小
// 将已上传数据复制过去
//
Buffer.BlockCopy(tempBuff, //源数据
0, //从0开始读
buffer, //目标容器
bytesRead, //指定存储的开始位置
count); //要复制的字节数。
// 开始记录已上传大小
bytesRead = tempBuff.Length;
// 循环分块读取,直到所有数据读取结束
while (request.IsClientConnected() &&!request.IsEntireEntityBodyIsPreloaded() && bytesRead < length)
{
// 如果最后一块大小小于分块大小,则重新分块
if (bytesRead + count > length)
{
count = (int)(length - bytesRead);
tempBuff = new byte[count];
}
// 分块读取
read = request.ReadEntityBody(tempBuff, count);
// 复制已读数据块
Buffer.BlockCopy(tempBuff, 0, buffer, bytesRead, read);
// 记录已上传大小
bytesRead += read;
}
if ( request.IsClientConnected() && !request.IsEntireEntityBodyIsPreloaded() )
{
// 传入已上传完的数据
InjectTextParts(request, buffer);
}
}
}
}
这是我的方法,但是request.GetPreloadedEntityBody()为空,所以导致数据无法分块上传,我在vs08下调试看的,怎么回事啊,有人知道吗?继续啊
IIS 對 Request Max Length 有限制
可以先找一下這部分的資訊
火狐下调试可以取得数据,ie下得部署到IIS5.1或6.0上有数据
楼主试试这个控件:Xproer.HttpUploader5
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
与Discuz!X2整合-后台安装断点续传控件
与Discuz!X2整合-后台启用断点续传控件
与Discuz!X2整合-后台断点续传控件启用成功
与Discuz!X2整合-前台发帖页面
与Discuz!X2整合-上传
资源下载:
CAB安装包
EXE安装包
开发文档
升级日志
ASP.NET(C#)示例代码:
ASP.NET-ACCESS示例
ASP.NET-SQL2005示例
JSP示例代码
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP示例代码
PHP-MySQL-UTF8示例
Chrome,Firefox,IE断点续传控件示例(以下示例已整合IE32,IE64,Firefox,Chrome平台的插件)
ASP.NET-ACCESS示例
ASP.NET-SQL2005示例
JSP示例代码
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP示例代码
PHP-MySQL-UTF8示例