2016-01-05 3 views
2

Я использую следующий код, чтобы downlaod изображения формирует удаленный URL и сохранить в локальную папкуСкачать и сохранить изображение из URL-адрес Универсального окна приложения

 try 
     { 
      var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("MyAppName\\CoverPics", CreationCollisionOption.OpenIfExists); 

      var coverpic_file = await rootFolder.CreateFileAsync(filename, CreationCollisionOption.FailIfExists); 
      try 
      { 
       var httpWebRequest = HttpWebRequest.CreateHttp(coverUrl); 
       HttpWebResponse response = (HttpWebResponse)await httpWebRequest.GetResponseAsync(); 
       Stream resStream = response.GetResponseStream(); 
       using (var stream = await coverpic_file.OpenAsync(FileAccessMode.ReadWrite)) 
       { 
        await resStream.CopyToAsync(stream.AsStreamForWrite()); 
       } 
       response.Dispose(); 
      } 
      catch //any exceptions happend while saving the picture 
      { 
       saved = false; 
      } 
     } 
     catch 
     { 
      //https://msdn.microsoft.com/en-us/library/windows/apps/br227250.aspx 
      //Raise an exception if file already present 
      saved = true; 
     } 

Этот код работает для меня в большинстве хранения случаев, но я заметил, что за несколько снимков изображение не загружается полностью.

Я callling этой функции в блоке асинхронного для более tahn 100 изображений в одном ходе внутри цикла Еогеаспа и в конце концов некоторые из них не удалась Загрузкой

[Либо я могу увидеть некоторые недопустимый файл становится создано

или часть изображения только при загрузке и остальной части области. Я вижу блок черного цвета [выглядит как изображение повреждено].

Размер всех изображений составляет менее 1 МБ только

Может кто-нибудь помочь мне, чтобы оптимизировать этот код или указать на ошибку в коде, так что я могу иметь возможность загрузить все изображения полностью

+0

Ваш код выглядит нормально -_- – kiewic

+0

Любая идея, почему образы не скачивая полностью тогда? Является ли какое-либо влияние ограничений памяти? Должен ли я читать ответ в виде байтов данных? Или возможны какие-либо улучшения в этом коде? –

+0

@kiewic Не могли бы вы найти ответ и любые комментарии по этому поводу? –

ответ

1

Вы пытался использовать новый Windows.Web.Http.HttpClient вместо HttpWebRequest?

также рассмотрим этот вопрос SO: How do I use the new HttpClient from Windows.Web.Http to download an image?

Если вы не знакомы с HttpClient, я sugest смотреть CH9 презентацию: https://channel9.msdn.com/Events/Build/2013/4-092

+0

Я проверил его и увидел, что в потоке они конвертируются в BitmapImage, и я пытаюсь сохранить поток в файл. Я думаю, что его проблема в том, чтобы читать как куски, чтобы ничто не потеряло при сохранении изображения. Любая помощь будет заметна для этого. Все еще я борюсь –

+0

Вы загружаете изображения одновременно? Или одно изображение вовремя? –

+0

Один за раз, и даже если он не существует –

5

я не вижу какой-либо ошибки в своем коде. Но после попытки несколько различных способов скачивания и сохранения файла моего код выглядит примерно так и

try 
      { 
       HttpClient client = new HttpClient(); // Create HttpClient 
       byte[] buffer = await client.GetByteArrayAsync(coverUrl); // Download file 
       using (Stream stream = await coverpic_file.OpenStreamForWriteAsync()) 
        stream.Write(buffer, 0, buffer.Length); // Save 
      } 
      catch 
      { 
       saved = false; 
      } 

И этот код работает отлично, не вызывая никаких проблем Всех изображений скачивания полностью и никаких больше проблем черного блока на изображениях.

Если какой-либо один может указывает на различие с моим первым кодом, будет очень полезно понял причину ошибки

+0

Теперь вы используете HttpClient вместо HttpWebRequest. –

+0

ДА. И с этим фрагментом кода моя проблема решена. Но все же я хочу знать, каково влияние HttpClient на WebRequest. Если кто-то может объяснить –

+0

Я не знаю, что «HttpClient» делает внутренне, но вы проверяете видео в CH9 link I в моем ответе?Они объясняют, почему следует использовать его над старым. –

Смежные вопросы