在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 Core中的HTML5客户端路由回退
- asp.net-mvc – 使用actionlink将文本框的值从视图传递到控
- 使用Stream进行byte[]进行转换时要注意的事
- asp.net – 错误BC30456:'[方法]’不是’ASP.[CodeBeh
- asp.net-mvc-5 – MVC 5 – 向用户添加声明
- IdentityServer4 QuickStart 授权与自定义Claims
- asp.net-mvc-4 – MVC 4中客户URL的自定义OpenIdClient
- asp.net – 如何Html.Encode在Webforms
- asp.net-mvc – 自定义模型绑定,模型状态和数据注释
- asp.net-mvc – 我们可以传递模型作为参数在RedirectToActi
- asp.net-mvc – ASP.NET MVC V2 – 好友类
- Asp.net 5 MVC 6,添加facebook电子邮件的权限
- asp.net – 通过ajax将jquery中的数组传递给c#we
- asp.net 操作FTP作为数据中转-Helper.cs
- 在ASP.NET Core应用程序中使用标准Active Direct
- asp.net删除文件session丢失
- asp.net-mvc – ASP.Net MVC风格包不包括大多数文
- entity-framework-4 – 在我的自定义MembershipP
- asp.net – 在web.config和asp页面中注册用户控件
- asp.net – Web浏览器进入kiosk模式