ASP.NET 2.0 中的文件上传进度条
本文关键字:文件 NET ASP | 更新日期: 2023-09-27 17:55:57
我的 .NET 网站上有一个文件上传。我使用 FileUpload .NET 控件进行上传,并将表单的目标设置为隐藏的 iframe。我使用客户端脚本提交表单,然后在页面上显示进度条,该进度条对同一服务器上的 ashx 文件执行 AJAX 请求,并每秒更新进度条。
这是文件上传时的代码部分 -
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 文件中的代码,它获取
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] + "}");
在这里,我总是在上传文件时"找不到ID",但是当文件完成上传时,我得到了一个成功的 - 十进制:1。
在此之前,我尝试使用会话变量并得到了相同的结果。我试过使用公共静态(线程安全?字典,但我得到相同的结果。以前有人遇到过这样的事情吗?在完全收到客户端请求之前,代码是否不执行?
标准文件上载控件不提供进度功能 - 在服务器完全接收文件之前,它不会接收文件。 当您在 上打开流时。已发布文件,文件已完全上传。
这里讨论了许多更好的上传解决方案。