如何在webapi上传中获取Multipart文件的流?

我需要使用Stream(Azure Blobstorage)上传文件,并且无法找到如何从对象本身获取流。 见下面的代码。

我是WebAPI的新手,并使用了一些示例。 我正在获取文件和filedata,但我的方法上传它并不正确。 因此,我需要将其转换或转换为普通Stream,此刻看起来有点难:)

我知道我需要使用ReadAsStreamAsync().Result以某种方式,但它在foreach循环中崩溃,因为我得到两个provider.Contents(第一个似乎正确,第二个没有)。

  [System.Web.Http.HttpPost] public async Task Upload() { if (!Request.Content.IsMimeMultipartContent()) { this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType); } var provider = GetMultipartProvider(); var result = await Request.Content.ReadAsMultipartAsync(provider); // On upload, files are given a generic name like "BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5" // so this is how you can get the original file name var originalFileName = GetDeserializedFileName(result.FileData.First()); // uploadedFileInfo object will give you some additional stuff like file length, // creation time, directory name, a few filesystem methods etc.. var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName); // Remove this line as well as GetFormData method if you're not // sending any form data with your upload request var fileUploadObj = GetFormData(result); Stream filestream = null; using (Stream stream = new MemoryStream()) { foreach (HttpContent content in provider.Contents) { BinaryFormatter bFormatter = new BinaryFormatter(); bFormatter.Serialize(stream, content.ReadAsStreamAsync().Result); stream.Position = 0; filestream = stream; } } var storage = new StorageServices(); storage.UploadBlob(filestream, originalFileName);**strong text** private MultipartFormDataStreamProvider GetMultipartProvider() { var uploadFolder = "~/App_Data/Tmp/FileUploads"; // you could put this to web.config var root = HttpContext.Current.Server.MapPath(uploadFolder); Directory.CreateDirectory(root); return new MultipartFormDataStreamProvider(root); } 

这与几个月前的困境(在MultipartStreamProvider接管之前捕获上传流并自动神奇地将流保存到文件中)相同。 建议是inheritance该类并覆盖方法……但这在我的情况下不起作用。 :((我希望将MultipartFileStreamProviderMultipartFormDataStreamProvider的function集合到一个MultipartStreamProvider中,而不使用自动保存部分)。

这可能有所帮助; 这是一个由Web API开发人员编写的 ,来自同一个开发人员。