以前はコピー BLOB を開始していましたが、コピーの進行中にコピー先 BLOB の数バイト (最初の 512 バイトなど) を読み取ることができました。コピー BLOB を開始し、コピーの進行中に最初の 512 バイトを読み取る以下のコードを参照してください。
しかし現在、blobStream.Read は、実際のバイトではなく、常にデータ バッファーをゼロで埋めます。最新の azure ストレージ クライアント ライブラリも試しましたが、出力は同じです。しかし、コピーが完了するとすぐに、実際のバイトを読み取ることができます。
これが最新の azure ストレージ サービスで導入されたバグであるかどうか、および考えられる回避策 (ある場合) を教えてください。
CloudBlobClient client = CloudStorageAccount.Parse(
string.Format(
"DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2}",
"http",
"<destination-account-name>",
"<destination-account-key>"
)
).CreateCloudBlobClient();
var vhdsContainer = client.GetContainerReference("<destination-container-name>");
CloudBlob destinationBlob = vhdsContainer.GetPageBlobReference("test-1-b5c1d3f4-23d5-40e4-adc7-236553f8d62d-1.vhd");
destinationBlob.StartCopyFromBlob(
new Uri("http://<source-storage>.blob.core.windows.net/<source-container-name>/test-4-d803ca0a-5d98-4be8-8895-2a9d15ec3974-1.vhd"), null, null, null);
CloudBlob destBlob = vhdsContainer.GetBlobReference("test-1-b5c1d3f4-23d5-40e4-adc7-236553f8d62d-1.vhd");
int maxWaitTime = 3*60000;//let's wait for a maximum of 3 minute
do
{
destBlob.FetchAttributes();
if (destBlob.CopyState.BytesCopied > 2048 || maxWaitTime <= 0)
{
break;
}
maxWaitTime -= 1000;
Thread.Sleep(1000);
}
while (true);
var data = new byte[512];
using (BlobStream blobStream = destBlob.OpenRead())
{
blobStream.Seek(0, System.IO.SeekOrigin.Begin);
blobStream.Read(data, 0, 512);
}