【问题标题】:How to use BlockBlob when uploading large file in Windows Azure web site在 Windows Azure 网站上传大文件时如何使用 BlockBlob
【发布时间】:2012-09-15 01:57:23
【问题描述】:

所有,我试图在一个网页中上传一个更大的文件(700MB),其中包含一个 Form 中的 File html 元素。我想在服务器端可以获取流并将其上传到 Azure 存储。 这是服务器端的一些代码sn-p。

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。

谢谢。

【问题讨论】:

    标签: file-upload azure azure-blob-storage


    【解决方案1】:

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

    <system.web>
      <httpRuntime executionTimeout="240" maxRequestLength="716800" />
    </system.web>
    
    <system.webServer> 
        <security> 
            <requestFiltering>
                <requestLimits maxAllowedContentLength="716800" /> 
            </requestFiltering> 
        </security> 
    </system.webServer>
    

    每当有人上传大于 256KB 的文件(这是默认设置)时,该文件都会缓冲到磁盘(记录在 here)。所以你不必担心传入的文件。

    要将此文件上传到 blob 而不将其加载到内存中,您可以简单地使用 HttpPostedFile 的流并将其转发到存储客户端:

     var blob = container.GetBlockBlobReference(blobName);
     blob.UploadFromStream(Request.Files[0].InputStream);
    

    最后,如果您想并行上传 blob,您可以从该页面上的代码开始:Blob Parallel Upload and Download(您需要更改 UploadFileToBlobAsync 方法以接受流而不是文件名)。

    【讨论】:

    • 感谢您的帮助info,但如果我的网站部署在 windows azure 上。可能 Windows Azure 网站不支持上传大文件。因为你说大于256KB的文件会被缓冲做磁盘。我们知道Azure网站看不到位于的磁盘。我们不知道它的大小,也许它小于700MB,所以我认为它有问题。你怎么看这个?谢谢
    • 如果您使用 Windows Azure 网站,您需要在 web.config 中进行更改以查看是否可行(您可以覆盖 web.config 的某些部分,但应该允许这些更改)。无论如何,您不需要直接访问该文件,出于性能原因,它只是缓冲到磁盘中。最后,您不需要直接访问该文件,您只需按照我的回答中的说明使用 InputStream 即可。请记住,免费和共享网站的存储空间限制为 1GB:windowsazure.com/en-us/pricing/details/#web-sites
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多