我正在尝试将内容上传到 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
When a block blob upload is larger than the value in this property, storage clients break the file into blocks.
是否应该有单独的代码行来启用此功能。
最佳答案
Storage clients default to a 32 MB maximum single block upload. When a block blob upload is larger than the value in
SingleBlobUploadThresholdInBytes
property, storage clients break the file into blocks.
正如 Tamra 所说,存储客户端处理将文件分成 block 的工作。这是我的测试,以便您更好地理解它。
代码示例
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);
场景
如果您正在编写大小不超过
SingleBlobUploadThresholdInBytes
属性的 block blob,则可以通过单个写入操作将其完整上传。调用
UploadFromByteArray
方法时,可以通过Fiddler捕获网络包来理解。当上传的 block blob 大小大于
SingleBlobUploadThresholdInBytes
属性中的值时,存储客户端会自动将文件分成 block 。我上传了一个大小接近90MB的blob,那么你可以发现差异如下:
快照后,您可以发现存储客户端将文件分成 4MB 大小的 block ,并同时上传 block 。
Every time the blob is over 32MB, the above raises an exception
您可以尝试设置SingleBlobUploadThresholdInBytes
属性或在调用UploadFromByteArray
方法时捕获网络包来查找详细错误。
关于azure - 将 Azure Blob block 上传限制从 32 MB 提高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237750/