有没有办法使用HttpPostedFile类获得上传进度?

时间:2009-07-20 17:10:28

标签: c# asp.net-mvc ajax json callback

我想使用HttpPostedFile类将一个或多个大文件从网页上传到ASP.NET MVC控制器。使用此类,上载的大于256 KB的文件将缓冲到磁盘,而不是保存在服务器内存中。

我的理解是它可以这样做:

if (context.Request.Files.Count > 0)
{
    string tempFile = context.Request.PhysicalApplicationPath;
    for(int i = 0; i < context.Request.Files.Count; i++)
    {
        HttpPostedFile uploadFile = context.Request.Files[i];
        if (uploadFile.ContentLength > 0)
        {
            uploadFile.SaveAs(string.Format("{0}{1}{2}",
              tempFile,"Upload\\", uploadFile.FileName));
        }
    }
}

有没有办法设置回调或使用其他方法,通过AJAX或JSON定期将状态返回到网页,以便显示进度条和完成百分比?代码会是什么样的?

2 个答案:

答案 0 :(得分:4)

不。只要您使用HttpRequest.InputStream,Asp.net就会一直加载整个请求内容。

如果你想提供这样的反馈,你需要在客户端使用flash之类的东西来做,或者编写你自己的http hanlder,直接用HttpWorkerRequest方法自己加载实体。< / p>

答案 1 :(得分:0)

我倾向于同意serialseb。您需要编写自己的http处理程序,这可能会将上传进度输出到某个事件,可能会有一个特定的操作来查询此类进度',允许客户端定期查询更新。