在ASP.NET中流式传输大文件上传
|
我有一个ASP.NET MVC应用程序与一个页面,允许用户上传文件。这些文件将是几百兆字节。 我正在客户端使用FineUploader,如果浏览器支持它,它将使用FileAPI / XHR,否则将使用enctype =“multipart whatever”来回溯到Iframe / form。 所以在服务器端我需要评估Request.Files.Count>如果是真的,这是一个旧的学校上传,我保存的文件像Request.Files [0] .InputStream.CopyTo(myFileStream)否则我做Request.InputStreawm.CopyTo(myFileStream)。 这里有一些我写的实际代码,这样做的东西:https://github.com/ronnieoverby/file-uploader/blob/master/server/ASP.NET%20MVC%20C%23/FineUpload.cs 这一切都很好,但在我的测试中,我注意到,在整个文件上传之前,ASP.NET MVC控制器动作和HttpHandler都不会开始处理,如果文件非常大,这意味着它占用很多的Web服务器的RAM。 我发现这是:Streaming large file uploads to ASP.NET MVC这听起来很有希望,但我真的不知道代码在他的应用程序中的位置。 那么问题是:如何在ASP.NET中仍然发生上传文件时将文件上传到磁盘? 更新 我刚刚看到一个关键细节,以前没有下沉。从HttpPostedFile文档:
好的,这解决了在大型上传期间Web服务器的RAM利用率可能上涨的担忧。但是,仍然有一个问题:文件完全传输到Web服务器后,服务器必须花时间将其移动到最终目的地。如果文件系统操作是副本(如果目的地在另一个物理磁盘上,则保证),则响应将不必要地延迟。 老实说,我可以通过增加上传处理程序/操作的响应超时来生活。但是,将字节直接传输到目的地是很好的。 解决方法您可以以完全自定义的方式处理上传,而无需使用缓冲HttpRequest.GetBufferlessInputStream方法。基本上,您可以访问原始的传入数据,并随意随意使用它。
我刚刚创建了一个将原始请求内容保存到文件的小样本: >创建处理程序: public class UploadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
using (var stream = context.Request.GetBufferlessInputStream())
using (var fileStream = File.Create("c:tempfile.txt"))
{
stream.CopyTo(fileStream);
}
}
public bool IsReusable { get { return true; } }
}
>在Web.config中注册: <system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<handlers>
<add name="UploadHandler" verb="POST"
path="/upload"
type="UploadHandler"
resourceType="Unspecified"/>
</handlers>
</system.webServer>
>创建一个带有表单的页面: <form action="/upload" method="post" enctype='multipart/form-data'> <input type="file" name="aa" id="aa"/><input type="submit"/></form> (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Nuget如何指定包位置?
- asp.net – 无法将HttpHandler映射到“路径/ *”通配符映射
- asp.net-mvc – 什么是ASP.NET MVC的验证选项
- asp.net – 如何保护存储在web.config中的密码?
- asp.net – HttpHandler 101失败
- asp.net – 元素’system.webServer’有无效的子元素’重写
- asp.net – 发布管理 – 发布给用户的一小部分 – 它对于面
- asp.net – 如何使用TLS电子邮件与web.config
- asp.net-mvc – 如何在Controller外访问RequestContext?
- 如何从ASP.NET中的代码隐藏文件访问IFRAME?
- asp.net – AspNetSession布局渲染器不工作
- asp.net – 无法加载文件或程序集“Microsoft.We
- asp.net-mvc – 使用ASP.NET MVC v2 EditorFor和
- asp.net – 内联JavaScript的外部JavaScript文件
- 如何在本地运行ASP.NET C#Web应用程序?
- asp.net-mvc – 强大类型的ASP.NET MVC与ADO.NET
- 什么时候用ASP.NET MVC来淘汰JavaScript
- asp.net – 如何将下拉列表添加为gridview项
- asp.net – 如何将http请求转发到https网址
- asp.net-mvc-3 – 重定向与RedirectToRouteResul
