Получить ресурс из HTTP и сохранить в Iso Stoarage - PullRequest
0 голосов
/ 23 октября 2011

В настоящее время я использую этот код для сохранения данных в изолированном хранилище. Это работает нормально, если носитель локальный, но когда я пытаюсь получить медаи с http-адреса, я получаю сообщение об ошибке на URiKind. Я изменился с Абсолюта. Относительно, но все еще без игры в кости.

Есть предложения?

FYI - имя файла = http://www.domain.com/media.wma

Ошибка: не удается создать относительный URI, поскольку параметр 'uriString' представляет абсолютный URI.

Или: ожидаемый относительный Uri, найден абсолютным.

private void DownloadToIsoStore(string fileName)
        {

            string ringtonePath = GetRingtonePath();

            IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();

            // If the file already exists, no need to "download", just return
            if (isoStore.FileExists(fileName))
            {
                return;
            }

            StreamResourceInfo sr = Application.GetResourceStream(new Uri(fileName, UriKind.Relative));

            using (BinaryReader br = new BinaryReader(sr.Stream))
            {
                // Simulate "downloading" medai file
                byte[] data = br.ReadBytes((int)sr.Stream.Length);

                // Save to local isolated storage
                SaveToIsoStore(fileName, data);
            }

        }

Ответы [ 2 ]

1 голос
/ 24 октября 2011

U может использовать следующий код 1. Вызовите эту функцию с параметром (http://www.domain.com/media.wma)

    public void **GetMediaFile**(string httpPath)
    {
        WebClient wcMedia = new WebClient();
        wcMedia.OpenReadAsync(new Uri(httpPath));
        wcMedia.OpenReadCompleted += new OpenReadCompletedEventHandler(wcMedia_OpenReadCompleted);
        wcMedia.AllowReadStreamBuffering = true;

    }

2. Обработчик событий, который загружает медиафайл в нужное (iso_path) расположение внутри изолированного хранилища.

    void wcMedia_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {       
        string iso_path="path where you want to put media file insode the isolated storage";
        var isolatedfile = IsolatedStorageFile.GetUserStoreForApplication();
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(iso_path, System.IO.FileMode.Create, isolatedfile))
        {
            byte[] buffer = new byte[e.Result.Length];
            while (e.Result.Read(buffer, 0, buffer.Length) > 0)
            {
                stream.Write(buffer, 0, buffer.Length);
            }
        }

}

1 голос
/ 23 октября 2011

Application.GetResourceStream принимает относительный URI к ресурсу, встроенному в ваше приложение.
Это не HTTP-клиент.

Вместо этого вы должны использовать классы WebClient или HttpWebRequest.

...