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。

在此之前,我尝试使用会话变量并得到了相同的结果。我试过使用公共静态(线程安全?字典,但我得到相同的结果。以前有人遇到过这样的事情吗?在完全收到客户端请求之前,代码是否不执行?

ASP.NET 2.0 中的文件上传进度条

标准文件上载控件不提供进度功能 - 在服务器完全接收文件之前,它不会接收文件。 当您在 上打开流时。已发布文件,文件已完全上传。

这里讨论了许多更好的上传解决方案。