进度指示器使用FileUpload控件

时间:2010-01-07 14:10:56

标签: c# asp.net file-upload

我有一个网页,我希望人们能够将内容上传到。 (只有少数人使用它,因为它是访问限制的,所以我不太担心任何DOS类型的攻击。)

我正在使用fileUpload控件执行此操作:

protected void Button1_Click(object sender, EventArgs e)
    {
        if (fileUploader.HasFile)
        try {
          fileUploader.SaveAs(Server.MapPath("Uploads\\") + fileUploader.FileName);
          errorMessage.Text = "File name: " +
               fileUploader.PostedFile.FileName + "<br>" +
               fileUploader.PostedFile.ContentLength + " kb<br>";
        }
        catch (Exception ex) {
          errorMessage.Text = "ERROR: " + ex.Message.ToString();
        }
        else
        {
           errorMessage.Text = "You have not specified a file.";
        } 
    }

文件最大可达50MB(我已更改了web.config以允许此操作)。我遇到的问题是,对于大文件,用户无法看到上传的进度。

我想知道如何在页面上显示进度,以便用户可以看到正在发生的事情。没有任何想象力的东西 - 只是像:

上传的字节数/总字节数

没关系。我可以使用postingFile.ContentLength获取总字节数,但不知道如何上传字节。

此外 - 我是否可以在上传过程中刷新屏幕?

干杯,

3 个答案:

答案 0 :(得分:5)

这个答案并非特定于ASP ...

文件上传通常是通过HTTP POST发出Content-type: multipart/form-data请求来完成的。这包括请求正文的一个部分中的文件正文。

因此,在给定的浏览器选项卡中,在给定时间只能加载一个页面。简短的回答是,除非你真的很喜欢iframe(一个用于状态,一个用于上传),否则你将无法显示状态。

然而,如果您使用Flash,则可以。 http://www.uploadify.com/是一个很棒的小前端插件(用于jQuery),它允许用户选择多个文件,并将它们全部上传,显示整个过程中的状态。我只是将其插入一个将上传限制为64M的网站。工作真棒。

答案 1 :(得分:4)

您的实施是一种同步操作,不会向用户“反馈”文件上传进度。

有很多替代方案和第三方组件,您可能想要谷歌。

以下是:ASP.NET File Upload with Real-Time Progress Bar

答案 2 :(得分:3)

我使用了几个商业组件来做到这一点:

TelerikAjaxUPloader