使用FileUpload控件的进度指示器

4

我有一个网页,希望人们能够上传内容。(由于访问受限,只有少量人使用,所以我不太担心任何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以允许此操作)。我的问题是,在上传大文件时,用户无法看到上传进度。
我想知道如何在页面上显示进度,以便用户可以看到正在发生的事情。不需要任何花哨的东西 - 只需要像下面这样的内容:
已上传字节数 / 总字节数
将会很好。我可以使用postedFile.ContentLength获取总字节数,但不知道如何获取已上传的字节数。
另外 - 在上传过程中,我能刷新屏幕吗?
谢谢,
Ben
3个回答

5
这个答案不仅仅适用于ASP...
文件上传通常通过使用Content-type: multipart/form-dataHTTP POST请求来完成。其中一个部分包含了文件正文。
因此,在给定的浏览器选项卡中,一次只能加载一个页面。简短的回答是,除非您使用iframe(一个用于状态,一个用于上传),否则您将无法显示状态。
然而,如果您使用Flash,则可以。 http://www.uploadify.com/是一个很棒的小前端插件(用于jQuery),允许用户选择多个文件并上传它们,同时显示状态。我刚刚把它插入到限制上传到64M的网站中。效果非常好。

Uploadify似乎是未来的方向(只要我能让它正常工作!) - Ben

4

您的实现是同步操作,不会向用户反馈文件上传进度。

有很多替代方案和第三方组件可用,您可以通过谷歌搜索来找到它们。

以下是一个开始使用的示例:ASP.NET文件上传与实时进度条


我认为那个网站已经被黑客攻击了。有没有其他地方可以获取Matt Berseth控件的源代码? - bgmCoder

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接