Путь к файлам Внутри папки содержимого (ASP.NET MVC)
Там что-то я до сих пор не понимаю о том, как папка содержимого работает в ASP.NET MVC. Чтобы сделать все более ясным, у меня есть несколько вопросов:
- Является ли папка содержимого корневой папкой? Я имею в виду http://localhost/ указать на Content или это что-то еще?
- У меня есть файл с именем dummyIcon.png внутри папки Content/images/temp. Как найти его на своем доменном уровне (который является проектом библиотеки кодов)?
- Какова наилучшая практика отображения изображений в ASP.NET MVC? Должен ли я хранить путь к изображению в базе данных (что я лично предпочитаю), или я могу сохранить массив байтов и вернуть его в представление?
Я нашел следующие ссылки полезными в контексте веб-приложения MVC, но я по-прежнему оцениваю некоторые ответы на вопросы, изложенные выше. Спасибо.
Может ли ASP.NET MVC-контроллер вернуть изображение?
как отображать изображение с помощью представления и контроллера с помощью ASP.NET MVC
Ответы
Ответ 1
1. В папке Content находится корневая папка? Я имею в виду 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? Должен ли я хранить путь к изображению в базы данных (которая я лично предпочитают), или я могу сохранить массив байтов и верните его в представление?
Где вы храните изображения, зависит от ваших потребностей приложения. Являются ли эти общие изображения, которые используются для отображения изображений приложений (значки, логотип компании и т.д.). Тогда лучше хранить их в файловой системе.
Если ваше приложение имеет дело с изображениями, и вы работаете над сохранением изображений, манипуляций и т.д., тогда вам может понадобиться БД. Я думаю, что хранение изображений, используемых в веб-приложении, является накладными расходами.
Ответ 2
-
Все, что в корне будет указывать на корень, если оно игнорируется вашими маршрутами:
Если у вас есть изображение, размещенное в корневом каталоге вашего проекта. Затем, скажем, http:://localhost/dummy.ico"
даст вам 404, контроллер не найден. До вы делаете это в своем global.asax.cs
:
routes.IgnoreRoute("dummy.ico");
//you could add wildcards here to match different things
-
Из кода, который вы используете, говорит File.Open();
, вам нужен физический путь к файлу. Вы получите следующее:
string filePath = Server.MapPath(Url.Content("~/Content/Images/Image.jpg"));
-
Это до вас, хотя я бы сказал, что размещение файлов в базе данных имеет большой смысл, если вы хотите все в одном месте. Если вам нужно переместить приложение, вы просто переместите базу данных.
Когда дело доходит до путей к файлу, помните, что вы не хотите дублировать имена файлов, поэтому вам нужно предоставить каждому файлу GUID
и затем свяжите его. Это может иметь смысл, если у вас есть большое количество файлов (или больших файлов), поэтому вы не будете выглядеть как сумасшедшие.
НТН
Ответ 3
Вы должны сделать объект модели для возврата вашего контроллера. в этом примере я возвращаю SearchPageModel, класс, который я создал. но позволяет сказать, что у этого объекта есть свойство, называемое imageURL
но убедитесь, что контроллер фактически возвращает ActionResult
так, например...
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Search()
{
SearchPageModel Model = new SearchPageModel();
// populate the Model properties
Model.ImageURL = "myjpeg"
return View("Search", Model);
}
i затем передайте этот объект модели обратно к моему желаемому виду в этом случае мой "Поиск" View
и для отображения изображения в представлении, которое я добавил бы.
<img src="Images/<%=Model.ImageURL %>.jpg" />