2015-03-16 2 views
0

Я использую этот код, чтобы получить изображение из содержимого папки/IMG в визуальной студии:Как получить путь к изображению, хранящемуся в папке содержания .net

Image image = Image.FromFile(@"~\Content\img\toendra.JPG"); 

Это дает мне ошибку, что чем файл не найден. Однако, если я даю абсолютный путь к изображению, он работает:

Image image = Image.FromFile(@"C:\Users\Stijn\Source\Repos\groep11DotNet\p2groep11.Net\Content\img\toendra.JPG"); 

Что не так с моим относительным путем?

+0

Какую папку, что ваша программа выполняет? –

ответ

4

System.Drawing.Image.FromFile не знает, как обращаться с корневым относительным путем приложения ASP.NET. Поэтому вам нужно использовать промежуточную функцию для преобразования ее в физический путь к файлу, который она может понять.

Image image = Image.FromFile(HttpContext.Current.Server.MapPath("~/Content/img/toendra.JPG")); 

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

Если вы собираетесь использовать его много, можете сделать вспомогательный класс помощника.

public static class ImageHelper 
{ 
    public static Image LoadFromAspNetUrl(string url) 
    { 
     if(HttpContext.Current == null) 
     { 
      throw new ApplicationException("Can't use HttpContext.Current in non-ASP.NET context"); 
     } 
     return Image.FromFile(HttpContext.Current.Server.MapPath(url)); 
    } 
} 

Использование:

Image myImage = ImageHelper.LoadFromAspNetUrl("~/Content/img/toendra.JPG"); 
+0

Я пробовал это, но затем я получаю «Не могу разрешить символ» на сервере Server.MapPath, нет возможности импортировать его –

+0

@HardUser См. Обновленный ответ. Если вы находитесь в определенных местах в ASP.NET, то «Server» является свойством унаследованного класса, поэтому вы можете использовать его напрямую. Но если вы находитесь вне этого контекста, вы можете использовать 'HttpContext.Current.Server' для доступа к' HttpServerUtility'. – mason

+0

А это была моя проблема! Спасибо за это, он работает сейчас. –

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