File upload 在Windows Azure网站上载大文件时如何使用BlockBlob

File upload 在Windows Azure网站上载大文件时如何使用BlockBlob,file-upload,azure,azure-storage-blobs,File Upload,Azure,Azure Storage Blobs,总之,我试图在一个网页中上传一个更大的文件(700MB),其中包含一个表单中的文件html元素。我想在服务器端可以得到流并上传到Azure存储。 下面是服务器端的一些代码片段 public void UploadFile() { Stream source = Request.InputStream; long copiedByteCount = 0; byte[] buffer = new byte[2 * 1024]; for (int

总之,我试图在一个网页中上传一个更大的文件(700MB),其中包含一个表单中的文件html元素。我想在服务器端可以得到流并上传到Azure存储。 下面是服务器端的一些代码片段

public void UploadFile()
{
    Stream source = Request.InputStream; 
    
    long copiedByteCount = 0;

    byte[] buffer = new byte[2 * 1024];
    
    for (int len; (len = from.Read(buffer, 0, buffer.Length)) > 0; )
    {
        //Begin to write buffer to Azure.
        ....(I am still searching the BlockBlob code sample in google.)
        //
        copiedByteCount += len;
    }
   
}
我的问题是

1.我希望应用程序不会占用所有内存,所以请逐块读取流。我不知道它是否如我所愿

2.有人能帮我举个例子,说明如何将所有缓冲块并行写入BlockBlob


谢谢。

首先,您必须知道,要允许700MB上传,您需要在web.config中允许这一点:

<system.web>
  <httpRuntime executionTimeout="240" maxRequestLength="716800" />
</system.web>

<system.webServer> 
    <security> 
        <requestFiltering>
            <requestLimits maxAllowedContentLength="716800" /> 
        </requestFiltering> 
    </security> 
</system.webServer>

最后,如果你想并行上传blob,你可以从这个页面上的代码开始:(你需要更改UploadFileToBlobAsync方法来接受流而不是文件名)。

谢谢你的帮助,但是如果我的网站部署在windows azure上。可能Windows Azure网站不支持上载大文件。因为您说过大于256KB的文件将被缓冲到磁盘上。我们知道Azure网站看不到位于中的磁盘。我们不知道它的大小,可能小于700MB,所以我认为它有问题。你对此有何看法?谢谢如果您使用Windows Azure网站,您需要在Web.config中进行更改,以查看是否有效(您可以覆盖Web.config的某些部分,但这些更改应该是允许的)。无论如何,您不需要直接访问该文件,出于性能原因,它只是被缓冲到磁盘上。最后,您不需要直接访问该文件,只需使用我在回答中解释的InputStream即可。请记住,免费和共享网站的存储空间限制为1GB:
 var blob = container.GetBlockBlobReference(blobName);
 blob.UploadFromStream(Request.Files[0].InputStream);