Путь к файлам внутри папки содержимого (ASP.NET MVC) - PullRequest
22 голосов
/ 24 марта 2011

Там что-то я до сих пор не понимаю, как работает папка Content в ASP.NET MVC.Чтобы прояснить ситуацию, у меня есть несколько вопросов:

  1. Является ли папка содержимого корневой папкой?Я имею в виду http://localhost/ указывает на содержимое или это что-то еще?
  2. У меня есть файл с именем dummyIcon.png в папке Content / images / temp.Как найти его на уровне моего домена (который является проектом библиотеки кодов)?
  3. Какова наилучшая практика отображения изображений в ASP.NET MVC?Должен ли я сохранить путь к изображению в базе данных (который я лично предпочитаю) или сохранить байтовый массив и вернуть его в представление?

Я нашел следующие ссылки полезными вконтекст веб-приложения MVC, но я все равно буду признателен за некоторые ответы на вопросы, опубликованные выше.Спасибо.

Может ли контроллер ASP.NET MVC вернуть изображение?

как отобразить изображение с использованием представления и контроллера с помощью ASP.NET MVC

Ответы [ 3 ]

38 голосов
/ 24 марта 2011
  1. Все в корне будет указывать на корень, если оно игнорируется вашими маршрутами:

    Если у вас есть изображение , помещенное в корневой каталог вашего проекта. Затем, скажем, http:://localhost/dummy.ico" даст вам 404, контроллер не найден. До вы делаете это в своем global.asax.cs:

    routes.IgnoreRoute("dummy.ico");
    //you could add wildcards here to match different things
    
  2. Из кода, если вы используете, говорит File.Open(); вам нужен физический путь к файлу. Вы получаете это так:

    string filePath = Server.MapPath(Url.Content("~/Content/Images/Image.jpg"));
    
  3. Вам решать, хотя я бы сказал, что размещение файлов в базе данных имеет большой смысл, если вы хотите, чтобы все было в одном месте. Если вам нужно переместить ваше приложение, вы просто переместите базу данных.

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

НТН

11 голосов
/ 24 марта 2011

1. Является ли папка контента корневой папкой?Я имею в виду http://localhost/ указывает на содержимое или это что-то еще?

Нет, http://localhost:port/ не указывает на папку содержимого.Вы можете получить доступ к файлам в папке содержимого через http://localhost:port/content/...

2. У меня есть файл с именем dummyIcon.png в папке Content / images / temp.Как найти его на уровне моего домена (который является проектом библиотеки кодов)?

Вы должны иметь доступ к нему как http://localhost:port/Content/images/temp/dummyIcon.png

3.Чтонаилучшая практика отображения изображений в ASP.NET MVC?Должен ли я сохранить путь к изображению в базе данных (который я лично предпочитаю) или сохранить байтовый массив и вернуть его в представление?

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

Если ваше приложение работает с изображениями, а вы работаете над хранением изображений, манипуляциями и т. Д., То вам может понадобиться БД.Я думаю, что хранение изображений, используемых в веб-приложении, является непомерной нагрузкой.

0 голосов
/ 24 марта 2011

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

но убедитесь, что контроллер действительно возвращает ActionResult

так например ...

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Search()
    {
        SearchPageModel Model = new SearchPageModel();

        // populate the Model properties
        Model.ImageURL = "myjpeg"

        return View("Search", Model);
    }

Затем я передаю объект этой модели обратно в желаемое представление, в этом случае мое представление «Поиск»

и для отображения изображения в представлении я бы добавил ..

<img src="Images/<%=Model.ImageURL %>.jpg" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...