2015-05-13 2 views
0

У меня есть ошибка в следующем кодеPath.Combine на URLs дает исключение: формат данного пути не поддерживается

Uri imagesrc = new Uri("http://somewebsite.com/demo/images/slideshow/29.jpg"); 
Image image = Image.FromFile(Path.Combine("/comph/", imagesrc.ToString())); 

Я также попытался следующий код - где /comph/ это мой корневой каталог

Image.FromFile(Path.Combine("/comph/","http://some_other_website.com/demo/images/slideshow/29.jpg"); 

Указанный выше URL-адрес изображения верен, когда я вставляю этот URL-адрес в браузере, он показывает изображение.

С выше кода возникает исключение: формат

данный путь не поддерживается.

Что не так с этим кодом?

+4

System.IO.Path предназначен исключительно для путей к файлам. Каков ваш ожидаемый результат? '/ comph/http: // ...' недействительно. –

+0

Каков ваш ожидаемый результат? – User2012384

+1

Вы не можете получить такой файл, сначала вам нужно загрузить изображение (например, в потоке с помощью веб-клиента). – Kryptos

ответ

-1

Быстрый (но немного грязный способ), чтобы взять локальную часть от Uri, обнажать корень "/", а затем использовать Path.Combine:

Uri imagesrc = new Uri("http://somewebsite.com/demo/images/slideshow/29.jpg");  
string target = Path.Combine("comph", imagesrc.LocalPath.TrimStart('/')); 

результат "comph\demo/images/slideshow/29.jpg", который будет работать но вы можете заменить / на \ для косметики.

+0

'Path.Combine' предназначен для использования с локальными файловыми путями, * не * с URL-адресами. * Не используйте этот метод для URL-адресов! – stakx

-1

Не используйте Path.Combine для URL-адресов. Этот метод предназначен для использования с локальными путями файловой системы!

Хотя он не может работать во всех случаях, вы можете часто использовать new Uri(Uri, Uri) объединить адреса:

// using System; 
var absoluteUri = new Uri('http://example.com/path/'); 
var relativeUri = new Uri('./more', UriKind.Relative); 
var combinedUri = new Uri(absoluteUri, relativeUri); 

присоединяя путь к существующему URL, кажется, работает только правильно, когда путь существующего URL заканчивается с / ; в противном случае последний комбинированный URL-адрес может отсутствовать.

(я не проверял, что происходит, когда существующий URL уже есть строка запроса или фрагмент, кстати. Убедитесь в том, чтобы проверить это самостоятельно, если это может иметь значение в вашем случае.)

+0

Не используйте URL для Image.FromFile(), для этого он не предназначен. –

+0

@HenkHolterman: Возможно.Мой ответ посвящен тому, как правильно манипулировать (конкатенировать) URL-адреса, если это то, что хочет сделать OP. Должен ли 'Image.FromFile' получать URL-адрес в первую очередь или нет, вероятно, заслужил бы свой собственный выделенный ответ. – stakx

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