CloudBlockBlob を使用して Azure Storage に写真をアップロードするのに問題があります
//module level variables
CameraCaptureTask cameraCaptureTask;
Stream _media;
// Constructor
public MainPage()
{
InitializeComponent();
cameraCaptureTask = new CameraCaptureTask();
cameraCaptureTask.Completed += new EventHandler<PhotoResult>(cameraCaptureTask_Completed);
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
cameraCaptureTask.Show();
}
private async void cameraCaptureTask_Completed(object sender, PhotoResult e)
{
_media = e.ChosenPhoto;
ShowPhotoOnScreen();
var todoItem = CreateToDo(e);
await UploadFileToAzureStorage(todoItem);
}
//Works good till here. It will go off and never come back.
private async Task UploadFileToAzureStorage(TodoItem todoItem)
{
Stream _media ;
// Upload the new image as a BLOB from the stream.
CloudBlockBlob blobFromSASCredential = container.GetBlockBlobReference(todoItem.ResourceName);
_photoCache.Position = 0;
await blobFromSASCredential.UploadFromStreamAsync(_media );
}
これは非同期に開始され、戻ることはありません。ストリームで何か間違ったことをしているような気がします。
私の質問:
- ストリームをどのように処理すればよいですか?
- UploadFromStreamAsync に完了イベントが表示されません。OnCompleted をキャプチャする賢い方法や、使用すべき別の方法はありますか?
同様のコードが Azure Storage チュートリアルにあり、Win8 でうまく機能します: http://www.windowsazure.com/en-us/develop/mobile/tutorials/upload-images-to-storage-dotnet/
StorageFile _media = null;
// Get the new image as a stream.
using (var fileStream = await _media.OpenStreamForReadAsync())
{
...
// Upload the new image as a BLOB from the stream.
CloudBlockBlob blobFromSASCredential = container.GetBlockBlobReference(todoItem.ResourceName);
await blobFromSASCredential.UploadFromStreamAsync(fileStream.AsInputStream());
}
Win8 と WP8 の例の主な違いは次のとおりです。
- 写真は WP8 の StorageFile (Win8) とストリームでキャプチャされます。
- AsInputStream は WP8 では有効ではないようです
さらに情報が必要な場合はお知らせください。ありがとう。