4

我有一个通过 HttpPostedFileBase 接收文件的 ASP.NET MVC 操作。

我想尽快开始从流中读取。这样我就可以报告上传进度(通过单独的机制)。我遇到的问题是,在上传的文件全部可用之前,我在此操作中的断点不会被命中。

如何在完全上传之前阅读发布的文件流?

[HttpPost]
public ActionResult Upload(HttpPostedFileBase uploadFile)
{
    ... uploadFile has been fully uploaded before this point
}

编辑:更新 - 我现在尝试了另一种方式,通过 HttpHandler 实现这个逻辑,但是,当我开始从流中读取时,代码会阻塞,直到文件流完成上传到服务器。

还没有运气。

4

1 回答 1

1

问题是在 HttpContext.Request 对象上使用多个属性会导致 ASP.NET 等到处理完完整的发布数据。绕过这个问题的关键是 HttpContext.Request.GetBufferlessInputStream()。然而,这需要处理,并且没有内置的方法可以做到这一点。

最后的解决方案是创建可以解析原始帖子数据中的多部分内容的类,我通过查看它在 ASP.NETs HttpContext.Request 代码中的完成方式来实现这一点。我在 System.Web 中找到了各种组件,并且能够适应我的需求。

代码现在构成了我在这里编写的项目的一部分:

https://journals.appsoftware.com/public/20/97/3819/programming-blog/development/asp.net-file-uploader-with-signalr-progress-bar-and-extended-input-stream-processing

于 2013-03-09T01:09:05.353 回答