Загрузка C# из хранилища Windows Azure возвращает пустой файл без каких-либо исключений.

Я пытаюсь использовать хранилище Windows Azure для своего приложения Магазина Windows с мобильными службами для хранения изображений. Я сделал загрузку, следуя этому руководству:

http://www.windowsazure.com/en-us/develop/mobile/tutorials/upload-images-to-storage-dotnet/

Однако я не смог найти никаких материалов по загрузке файлов. Я даже не смог найти ссылку на классы для версии магазина Windows! Если кто-то может направить меня к документации, я был бы признателен.

Во всяком случае, я написал код, но он не работает:

public static async System.Threading.Tasks.Task DownloadUserImage(SQLUser userData)
{
    var usersFolder = await GetUsersFolder();
    var imageUri = new Uri(userData.ImageUri);
    var accountName = "<SNIP>";
    var key = "<SNIP>";

    StorageCredentials cred = new StorageCredentials(accountName, key);
    CloudBlobContainer container = new CloudBlobContainer(new Uri(string.Format("https://{0}/{1}", imageUri.Host, userData.ContainerName)), cred);
    CloudBlockBlob blob = container.GetBlockBlobReference(userData.ResourceName);

    var imageFile = await usersFolder.CreateFileAsync(userData.Id.ToString() + ".jpg", CreationCollisionOption.ReplaceExisting);
    using (var fileStream = await imageFile.OpenAsync(FileAccessMode.ReadWrite))
    {
        try
        {
            await blob.DownloadToStreamAsync(fileStream);
        }
        catch (Exception e)
        {
            Tools.HandleLiveException(e);
        }
    }
}

Этот код приводит к созданию пустого файла, но не создает никаких исключений. Если я вставлю значение imageUri в свой браузер, он начнет загрузку файла и успешно завершит загрузку. Однако моя программа почему-то этого не делает.

Любая помощь, пожалуйста?


person Sunius    schedule 05.04.2013    source источник


Ответы (1)


Видимо, я неправильно открывал стрим. Вот исправление:

public static async System.Threading.Tasks.Task DownloadUserImage(SQLUser userData)
{
    var usersFolder = await GetUsersFolder();
    var imageUri = new Uri(userData.ImageUri);
    var accountName = "<SNIP>";
    var key = "<SNIP>";

    StorageCredentials cred = new StorageCredentials(accountName, key);
    CloudBlobClient client = new CloudBlobClient(new Uri(string.Format("https://{0}", imageUri.Host)), cred);
    CloudBlobContainer container = client.GetContainerReference(userData.ContainerName);
    var blob = await container.GetBlobReferenceFromServerAsync(userData.ResourceName);

    var imageFile = await usersFolder.CreateFileAsync(userData.Id.ToString() + ".jpg", CreationCollisionOption.ReplaceExisting);
    using (var fileStream = await imageFile.OpenStreamForWriteAsync())
    {
        try
        {
            await blob.DownloadToStreamAsync(fileStream.AsOutputStream());
        }
        catch (Exception e)
        {
            Tools.HandleLiveException(e);
        }
    }
}

Теперь он работает отлично.

person Sunius    schedule 06.04.2013