阅读多部分/表格数据,而不接触磁盘
问题描述:
好的,所以我想在我的WebAPI中接收一个Multipart/Form-Data POST请求,并且处理其中包含的文件和表单域。这很容易,就像这样:阅读多部分/表格数据,而不接触磁盘
var provider = new MultipartFormDataStreamProvider(Path.GetTempPath());
await Request.Content.ReadAsMultipartAsync(provider);
var formValue = provider.FormData["form_value_here"];
var files = provider.FileData.Select(d => d.LocalFileName);
很容易得到任何表单域或我需要的特定文件。然而,我想要有类似的功能,但不是在将文件保存到磁盘时,我想让它们在Stream
这样做的原因是,我想散列值的文件被发布,并在必要时拒绝该请求,然后将文件保存到磁盘。有没有内置的提供者或类,我错过了一个方便的API?
答
您可以使用MultipartMemoryStreamProvider将表单数据作为流获取。你会想要这样的事情:
if (!Request.Content.IsMimeMultipartContent())
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var fileNames = new List<string>();
foreach (var file in provider.Contents)
{
fileNames.Add(file.Headers.ContentDisposition.FileName.Trim('\"'));
var buffer = await file.ReadAsByteArrayAsync();
//hash values, reject request if needed
}
return Ok();