ストリームを使用して、Azure ローカル開発アカウントに直接アップロードしたいと考えています。Azure BLOB ストレージのクラスを作成しました。
public class AzureBlob
{
delegate void UploadFinished(IAsyncResult result);
public void uploadFile()
{
//Initial configuration
CloudStorage account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateBlobClient();
CloudBlobContainer container = client.GetContainerReference("myfiles");
Stream stream = new MemoryStream();
//Upload to azure
CloudBlob blob = container.GetBlobReference("sample.txt");
UploadFinished uploadFinished = delegate(IAsyncResult result)
{
Console.WriteLine("Upload finished {0} {1}", result.IsCompleted, stream.Position);
};
blob.BeginUploadFromStream(stream, new AsyncCallback(uploadFinished));
//Write to stream
for(int i=0;i<100;i++)
{
for(int j=0;j<50;j++)
{
stream.WriteByte(65);
}
}
stream.Close();
}
}
私が直面する最初の問題は、ストレージにファイルを取得することですが、データが含まれていません。コールバックで EndOfUploadStream メソッドを使用しても (スタックオーバーフローの回答によると、これは解決策です)。次に、コールバック内にブレークポイントを配置すると、ストリームを閉じる前にコールバックが 1 回実行され、プログラムがストリームを更新し続けることがわかりました。この時点で、ストリームの位置は 913 付近 (ほぼランダム) です。非同期でストリームを介してブロブを直接アップロードするのを手伝ってください。