阅读以下帖子后。
我了解将大文件上传到云服务存在限制。并且看起来windows azure默认情况下不会为Web角色分配大的空间。
所以我试图找到一种方法来打破它。我成功测试的方法之一是掌握post请求流并逐块读取它而不从temp文件夹中读取它。以下是我的所作所为。请查看它。
CloudBlobClient blobClient = CreateBlobClient(account);
BlobRequestOptions options = CreateBlobRequestOpt();
CloudBlobContainer container = blobClient.GetContainerReference(sContainerName);
bool b = container.CreateIfNotExist();
CloudBlob blob = container.GetBlobReference(sBlobName);
blob.UploadFromStream(postFileStream, options);
我刚刚从postFileStream
的控制器Request.Files[0].InputStream
传递了Asp.net MVC
到CloudBlobClient。来自CloudBlobClient
的{{1}}将逐块读取流。这样就可以支持大文件帖子了。在我的测试中。即使是2GB的文件也可以正常工作。
但我也想让它在Azure Storage Library SDK
中发挥作用。我发现Api控制器中的Asp.net Web Api
是Request
。它与以System.Net.Http.HttpRequestMessage
命名的MVC控制器中的不同。那么如何在Web Api Controller中获取post请求文件流,就像在MVC控制器中一样?感谢。
答案 0 :(得分:0)
您可以使用Request.Content.ReadAsMultipartAsync()
方法获取文件内容。
你可以尝试这样的事情:
IEnumerable<HttpContent> contents = Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).Result.Contents;
foreach (var content in contents)
{
//...
//create your blob object...
//...
blob.UploadFromStream(content.ReadAsStreamAsync().Result);
}