0
我在.NET网站上有文件上传。我使用FileUpload .NET控件进行上传,并将表单的目标设置为隐藏的iframe。我使用客户端脚本来提交表单,然后在页面上显示一个进度条,该进度条对同一台服务器上的ashx文件执行AJAX请求,并每秒更新一次进度条。ASP.NET 2.0中的文件上传进度条
下面的代码的文件时上传的部分 -
string fileString = StringGenerator.GenerateString(8);
System.IO.Stream fileStream = System.IO.File.Create(fileRoot+ fileString + ".mp3");
System.IO.Stream inputStream = fileUpload.PostedFile.InputStream;
byte[] buffer = new byte[256];
int read;
if(StaticProgress.Progress.ContainsKey(trackId)) StaticProgress.Progress[trackId] = 0d;
else StaticProgress.Progress.Add(trackId, 0d);
int totalRead = 0;
long length = inputStream.Length;
while ((read = inputStream.Read(buffer, 0, buffer.Length)) > 0)
{
totalRead += read;
fileStream.Write(buffer, 0, read);
StaticProgress.Progress[trackId] = (double)totalRead/(double)length;
}
StaticProgress.Progress是返回一个静态字典的属性。 这里是在ashx的文件,该文件得到我总是“ID未找到”,而该文件被上传,但是当文件上传完毕,我得到一个成功的
context.Response.ContentType = "text/javascript";
int id;
if(!int.TryParse(context.Request.QueryString["id"], out id) || !StaticProgress.Progress.ContainsKey(id))
context.Response.Write("{\"error\":\"ID not found\"}");
else
context.Response.Write("{\"id\":\"" + id + "\",\"decimal\":" + StaticProgress.Progress[id] + "}");
这里进步的代码 - 十进制:1.
我试过在此之前使用会话变量,并得到了相同的结果。我试过使用公共静态(线程安全?)字典,但我得到了相同的结果。有没有人遇到过这样的事情?在客户端请求被完全接收之前,代码是否执行?
谢谢,我会看看他们。我之前在我的搜索中看到过这个页面,但没有人真正解释过,标准文件上传控件将不允许我从输入流中读取,直到全部收到。所以我试图自己做(我喜欢挑战)。 – Connell 2011-05-09 22:54:17