Как лучше всего разместить статические файлы в приложении asp.net mvc? - PullRequest
1 голос
/ 17 января 2012

Например, у меня есть приложение Asp.net MVC в пути D:/myprojects/sample, и я поместил статические файлы в E:/files.

Я не хочу помещать статические файлы в папку содержимого, так как статические файлы очень большого размера. Можно ли использовать файлы в E:/files в моем приложении? Как?

Я хочу отобразить статические html-файлы внутри фрейма, как показано ниже

&lt iframe id="content-frame" src="E:/files/index.html" width="100%" frameborder="0">

Но в Firefox я получаю предупреждение: «Firefox не знает, как открыть этот адрес, потому что протокол (e) не связан ни с одной программой».

Будет ли эта проблема решена, если в IIS создан виртуальный каталог?

Спасибо за ответы.

Ответы [ 4 ]

2 голосов
/ 18 января 2012

Это действительно зависит от природы этих «статических» файлов и от того, что клиент или вы действительно хотите с ними делать.

Если доступ к ним возможен только на сервере, то это не имеет значения, если идентификация, которую выполняет процесс, имеет необходимые разрешения.

Если клиент должен получить к ним доступ, вам нужно предоставить эти файлы.

Если это HTML-файлы, вы можете сохранить их в любой папке. Папка Content кажется мне подходящим местом, поэтому мне интересно узнать, почему вы «не хотите».

Изображения и прочее, ну, конечно, для этого уже есть папки.

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

Используйте маршрутизацию и передачу запроса через контроллер в качестве крайней меры, на мой взгляд, так как это излишне усложняет конвейер запросов для файла, который может быть легко обработан IIS напрямую.

2 голосов
/ 17 января 2012

Вы можете хранить файлы где угодно в файловой системе, если у вас есть разрешение.Однако часто имеет смысл сохранять их в каталоге приложения.

Хорошее место - папка App_Data в корне.Причина этого заключается в том, что файлы в папке App_Data не могут быть доступны напрямую через HTTP - сервер возвращает ошибку 404.Это может быть полезно, если в будущем вам будет необходимо ограничить доступ к этим файлам только авторизованным пользователям, например.

Поскольку вы используете MVC, вам необходимо настроить маршрут к файлам сервера в этомпапка, которая будет выглядеть следующим образом:

public FilePathResult GetFile(string path)
{
    return File(Path.Combine(Server.MapPath("~/App_Data/"), path), "image/jpeg");
}

Итак, файл может быть использован в вашей разметке, например:

@Url.Action("GetFile", new { controller = "Files", path = "myimage.jpg" })

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

1 голос
/ 17 января 2012

Вы можете разместить его где угодно.

В IIS у вас может быть virtualDirectory, указывающий на этот адрес.

например,

позволяет вашим статическим файлам находиться в "E: / files "

В IIS -> YourWebSite -> Добавить VirtualDirectory (скажем,« content »и указывает на« E: / files ».

Теперь вы можете получить к нему доступ изснаружи, как,

http://YourWebSite/content/myimg.png

Это будет действовать так, как если бы файлы были помещены в один каталог.

0 голосов
/ 17 января 2012

Редактировать - подробнее о App_Data Для чего используется папка App_Data в Visual Studio?

Можно использовать

App_Data
Iдумаю, что это абсолютное место для хранения статического контента.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...