asp.net-mvc – 来自HttpRequestMessage内容的文件名
发布时间:2020-12-16 07:19:05 所属栏目:asp.Net 来源:网络整理
导读:我实现了一个POST Rest服务来将文件上传到我的服务器.我现在的问题是我想按类型限制上传的文件.比方说,我只想允许上传.pdf文件. 我试图做的是 TaskStream task = this.Request.Content.ReadAsStreamAsync(); task.Wait(); FileStream requestStream = (FileS
我实现了一个POST Rest服务来将文件上传到我的服务器.我现在的问题是我想按类型限制上传的文件.比方说,我只想允许上传.pdf文件.
我试图做的是 Task<Stream> task = this.Request.Content.ReadAsStreamAsync(); task.Wait(); FileStream requestStream = (FileStream)task.Result; 但不幸的是,它无法将Stream转换为FileStream并通过requestStream.Name访问该类型. 是否有一种简单的方法(除了将流写入磁盘并检查类型)以获取文件类型? 解决方法
如果您将文件上传到Web API并且想要访问文件数据(Content-Disposition),则应将文件上载为MIME multipart(multipart / form-data).
Here我展示了一些如何从HTML表单,Javascript和.NET上传的例子. 然后你可以做这样的事情,这个例子只检查pdf / doc文件: public async Task<HttpResponseMessage> Post() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable,"This request is not properly formatted - not multipart.")); } var provider = new RestrictiveMultipartMemoryStreamProvider(); //READ CONTENTS OF REQUEST TO MEMORY WITHOUT FLUSHING TO DISK await Request.Content.ReadAsMultipartAsync(provider); foreach (HttpContent ctnt in provider.Contents) { //now read individual part into STREAM var stream = await ctnt.ReadAsStreamAsync(); if (stream.Length != 0) { using (var ms = new MemoryStream()) { //do something with the file memorystream } } } return Request.CreateResponse(HttpStatusCode.OK); } } public class RestrictiveMultipartMemoryStreamProvider : MultipartMemoryStreamProvider { public override Stream GetStream(HttpContent parent,HttpContentHeaders headers) { var extensions = new[] {"pdf","doc"}; var filename = headers.ContentDisposition.FileName.Replace(""",string.Empty); if (filename.IndexOf('.') < 0) return Stream.Null; var extension = filename.Split('.').Last(); return extensions.Any(i => i.Equals(extension,StringComparison.InvariantCultureIgnoreCase)) ? base.GetStream(parent,headers) : Stream.Null; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Asp.NET下拉列表方向
- asp.net-mvc – 已经使用相同的参数类型定义了一个名为“Cr
- asp.net-mvc – .NET MVC的简单OpenID身份验证代码
- asp.net-core – Asp.Net 5中的自定义ClaimsPrincipal(Mvc
- asp.net-mvc – ASP.NET MVC2成员:如何获取已登录用户的us
- .Net人的源代码控制
- asp.net-mvc – HttpPostedFileBase总是在ASP.NET MVC中返回
- ASP.NET Core集成现有系统认证
- asp.net – Microsoft重写模块 – 强制www url或从url删除w
- asp.net-mvc – 在ASP .NET MVC 3中使用XSLT
推荐文章
站长推荐
热点阅读