次のコードがあります。
public static void UploadStreamToBlob(Stream stream, string containerName, string blobName)
{
CloudStorageAccount storageAccount =
CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
blobContainer.CreateIfNotExists();
blobContainer.SetPermissions(
new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(blobName);
long streamlen = stream.Length; <-- This shows 203 bytes
blockBlob.UploadFromStream(stream);
}
と
public static Stream DownloadStreamFromBlob(string containerName, string blobName)
{
CloudStorageAccount storageAccount =
CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
Stream stream = new MemoryStream();
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(blobName);
if (blockBlob.Exists())
{
blockBlob.DownloadToStream(stream);
long streamlen = stream.Length; <-- This shows 0 bytes
stream.Position = 0;
}
return stream;
}
これを Azure エミュレーターで実行しています。これは、Sql サーバーを指しています。
私が知る限り、UploadFromStream はデータを正しく送信しているように見えますが、DownloadStreamFromBlob を実行しようとすると、長さ 0 のストリームが返されます。blockBlob.Exists は true を返しているので、そこにあると思います。ストリームが空である理由がわかりません。
ところで、両方の呼び出しで containerName と blobName のテストとテストを渡しています。
何か案は?