将Azure blob块上载限制从32 MB增加

时间:2016-08-30 22:00:21

标签: azure azure-storage-blobs

我正在尝试将内容上传到azure blob,大小超过32MB。下面的c#代码段:

CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(blobName);
blob.UploadFromByteArray(contents, 0, contents.Length, AccessCondition.GenerateIfNotExistsCondition(), options:writeOptions);

每次blob超过32MB时,上面都会引发异常:

Exception thrown: 'Microsoft.WindowsAzure.Storage.StorageException' in Microsoft.WindowsAzure.Storage.dll

Additional information: The remote server returned an error: (404) Not Found.

根据this

  

当块blob上传大于此属性中的值时,   存储客户端将文件分成块。

是否应该有单独的代码行来启用此功能。

1 个答案:

答案 0 :(得分:2)

  

存储客户端默认为最大单个块上传32 MB。当块blob上传大于SingleBlobUploadThresholdInBytes属性中的值时,存储客户端会将文件分成块。

正如Tamra所说,存储客户端处理将文件分成块的工作。以下是我对你的测试,以便更好地理解它。

代码示例

CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
var writeOptions = new BlobRequestOptions()
{
    SingleBlobUploadThresholdInBytes = 50 * 1024 * 1024, //maximum for 64MB,32MB by default          
};
blob.UploadFromByteArray(contents, 0, contents.Length, AccessCondition.GenerateIfNotExistsCondition(), options: writeOptions);

<强>方案

  1. 如果您正在编写一个大小不超过SingleBlobUploadThresholdInBytes属性的块blob,您可以通过一次写操作完整地上传它。

    您可以通过在调用UploadFromByteArray方法时通过Fiddler捕获网络包来理解它。

  2. 当块blob上传大于SingleBlobUploadThresholdInBytes属性中的值时,存储客户端会自动将文件分成块。

    我上传了一个大小接近90MB的blob,然后你可以找到差异如下:

    根据快照,您可以发现存储客户端将文件分成4MB大小的块并同时上传块。

  3.   

    每次blob超过32MB时,上面都会引发异常

    您可以尝试设置SingleBlobUploadThresholdInBytes属性或在调用UploadFromByteArray方法时捕获网络包以查找详细错误。