Azure ストレージからダウンロードされた inclomplete 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();
}
}
助けてくれてありがとう!
編集: 1 つの詳細を見逃していることに気付きました。ダウンロードした画像の寸法は正しいのですが、下から数行が黒くなっています。ソース画像と同じピクセルではありません。MD5 ハッシュを確認しましたが、それらが一致している間、外部アプリから画像をダウンロードすると、上記のコードでダウンロードすると一致しません。
Edit2: CloudBlob と出力ストリームのプロパティを調べた後、ダウンロード後に blob が正しい長さを示していても、ストリームは通常、少し低いことを示していることに気付きました。範囲内でダウンロードしようとしましたが、役に立ちませんでした