WEB API 使用MultipartFormDataStreamProvider上传文件
2015-03-23 13:00
543 查看
在这简短的教程中,我们打算去看如何上传多个文件在 ASP.Net WebAPI 中使用 MultipartFormDataStreamProvider。这一概念基于多部分/格式数据我们可以在这里发布多个文件的内容不仅将 NameValueCollection 作为服务器端提供的常规表单字段。在本教程中我们还看到了如何重写默认行为的 MultipartFormDataStreamProvider,将名称存储在一个独特的 BodyPart_ {GUID} 格式中。
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using System.Web; using System.Web.Http; using System.Web.Mvc; namespace UploadApplication.Controllers { public class UploadController : ApiController { public async Task<HttpResponseMessage> Post() { // Check whether the POST operation is MultiPart? if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } // Prepare CustomMultipartFormDataStreamProvider in which our multipart form // data will be loaded. string fileSaveLocation = HttpContext.Current.Server.MapPath("~/App_Data"); CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(fileSaveLocation); List<string> files = new List<string>(); try { // Read all contents of multipart message into CustomMultipartFormDataStreamProvider. await Request.Content.ReadAsMultipartAsync(provider); foreach (MultipartFileData file in provider.FileData) { files.Add(Path.GetFileName(file.LocalFileName)); } // Send OK Response along with saved file names to the client. return Request.CreateResponse(HttpStatusCode.OK, files); } catch (System.Exception e) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); } } } // We implement MultipartFormDataStreamProvider to override the filename of File which // will be stored on server, or else the default name will be of the format like Body- // Part_{GUID}. In the following implementation we simply get the FileName from // ContentDisposition Header of the Request Body. public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider { public CustomMultipartFormDataStreamProvider(string path) : base(path) { } public override string GetLocalFileName(HttpContentHeaders headers) { return headers.ContentDisposition.FileName.Replace("\"", string.Empty); } } }测试程序
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var client = new HttpClient()) using (var content = new MultipartFormDataContent()) { // Make sure to change API address client.BaseAddress = new Uri("http://localhost:53798/"); // Add first file content var fileContent1 = new ByteArrayContent(File.ReadAllBytes(@"c:\Users\aisadmin\Desktop\Me\NF2202533167366.pdf")); fileContent1.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Sample.pdf" }; // Add Second file content var fileContent2 = new ByteArrayContent(File.ReadAllBytes(@"c:\Users\aisadmin\Desktop\Sample.txt")); fileContent2.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Sample.txt" }; content.Add(fileContent1); content.Add(fileContent2); // Make a call to Web API var result = client.PostAsync("/api/upload", content).Result; Console.WriteLine(result.StatusCode); Console.ReadLine(); } } } }
相关文章推荐
- WEB API 使用MultipartFormDataStreamProvider上传文件
- webapi不使用MultipartFormDataStreamProvider上传multipart form-data数据的方法
- httpClient 使用multipart/form-data 类型上传文件及表单
- 如何使用multipart/form-data格式上传文件
- 上传文件报错:Processing of multipart/form-data request failed. Stream ended unexpectedly
- 使用curl 上传文件,multipart/form-data
- 如何使用multipart/form-data格式上传文件
- 如何使用multipart/form-data格式上传文件
- 如何使用multipart/form-data格式上传文件
- asp.net文件上传用到html的file控件,在使用母版页Master,更改form的Enctype=multipart/form-data的方法
- 理解HTTP消息头 (五)——使用multipart/form-data上传文件
- 如何使用multipart/form-data格式上传文件
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
- 使用multipart/form-data上传文件
- httpClient 使用multipart/form-data 类型上传文件及表单
- 如何使用multipart/form-data格式上传文件
- 如何使用multipart/form-data格式上传文件
- [转载红鱼儿]Delphi实现微信开发(3)如何使用multipart/form-data格式上传文件
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
- 如何使用multipart/form-data格式上传文件