在Web Api中将大文件上载到Cloud Service

时间:2014-04-16 07:51:59

标签: asp.net azure file-upload asp.net-web-api azure-storage

阅读以下帖子后。

  1. How to increase the temp folder size of web role
  2. Too small temp folder size of web role
  3. 我了解将大文件上传到云服务存在限制。并且看起来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 ApiRequest。它与以System.Net.Http.HttpRequestMessage命名的MVC控制器中的不同。那么如何在Web Api Controller中获取post请求文件流,就像在MVC控制器中一样?感谢。

1 个答案:

答案 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);
        }