Как создать систему.Рисование.Изображение из http-изображения

#c# #.net #http #httprequest

#c# #.net #http #httprequest

Вопрос:

Я не привык работать с удаленными ресурсами, поэтому, возможно, этот вопрос тривиален, но я не уверен, как его реализовать.

Мне нужно загрузить коллекцию изображений, которые размещены в http-папке, напримерhttp://www.myexsamplesite.com/images .

Внутри этого каталога у меня могло быть N изображений с разными именами.

Мне нужно показать эти изображения в приложении WinForms (в ListView).

Альтернатива, которую я изучаю, — это загрузка изображений в каталог tmp, а затем загрузка их с диска из моего приложения WinForms. Я использую следующее:

 WebClient fileReader = new WebClient();
 fileReader.DownloadFile(imageAddress, filePath);
  

чтобы загрузить файлы на диск. Мой вопрос:

Как я могу загрузить все файлы в папке http? Я предполагаю, что мне нужно перечислить файлы в папке, а затем загрузить один к одному.

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

Есть ли какой-либо другой способ перенести содержимое http-изображения в System.Drawing.Image ?

Помните, что мне нужно получить все файлы в папке http.

Заранее спасибо

Ответ №1:

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

Во-вторых, насколько я помню, вы можете загрузить image из stream . Вместо использования WebClient вы можете использовать HttpWebRequest , чтобы получить доступ к потоку содержимого и передать его в свой конструктор. Тем не менее, я думаю, что для вас может быть лучше / проще использовать временный каталог и загружать файлы оттуда. Иногда при загрузке чего-либо из сетевого потока, подобного этому, могут происходить неожиданные вещи (например, поток GIF-изображений с анимациями пытаются сохранить открытым для постоянного чтения кадров анимации), что может вызывать исключения в нечетные моменты, которые вы, возможно, не готовы отлаживать и понимать с места в карьер.

Наконец, обратите внимание, что вы будете использовать mime type здесь только для проверки того, что ваш контент является изображением, поэтому вы явно не загружали бы что-то типа mime application/octet-stream в image объект, а только такие вещи, как image/jpeg , image/gif image/png и т.д.