我遇到了从 Azure 存储下载不完整 blob 的问题。存储的文件是图像。几乎每个下载的文件最终都会在底部丢失几行。我检查了 blob,它们已正确上传。我正在使用以下代码从 Azure 服务下载 blob:
private async Task Download(CloudBlobClient client)
{
try
{
_media = await _directory.CreateFileAsync(ResourceName, CreationCollisionOption.FailIfExists);
}
catch (Exception)
{
return;
}
using (var stream = await _media.OpenAsync(FileAccessMode.ReadWrite))
{
var blob = await GetBlob(client);
await blob.DownloadToStreamAsync(stream);
_category.NotifyAzureProgress();
await stream.FlushAsync();
}
}
GetBlob() 方法如下所示:
private async Task<CloudBlockBlob> GetBlob(CloudBlobClient client)
{
CloudBlobContainer container = client.GetContainerReference(ContainerName);
await container.CreateIfNotExistsAsync();
var blob = container.GetBlockBlobReference(ResourceName);
return blob;
}
上传代码:
private async Task UploadAsync(CloudBlobClient client)
{
_media = await _directory.GetFileAsync(ResourceName);
using (var stream = await _media.OpenAsync(FileAccessMode.Read))
{
var blob = await GetBlob(client);
await blob.UploadFromStreamAsync(stream);
_category.NotifyAzureProgress();
}
}
谢谢你的帮助!
编辑:我意识到我错过了一个细节 - 下载的图像具有正确的尺寸,但底部的几行是黑色的 - 它与源图像的像素不同。我检查了 MD5 哈希值,当它们匹配时,当我通过外部应用程序下载图像时,当我使用上面的代码下载它们时它们不匹配。
Edit2:在检查了 CloudBlob 的属性和输出流之后,我注意到,即使 blob 在下载后给出了正确的长度,流通常会说一些更低的内容。我已经尝试通过范围下载,但无济于事