2016-02-26 57 views
1

好的,所以我想在我的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?

回答

1

您可以使用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();