Веб-сайт ASP.NET, где можно сохранить сгенерированные файлы

У меня есть веб-сайт ASP.Net, и в некоторых случаях он создает файлы .pdf и .csv для загрузки пользователями.

Теперь мой вопрос: какой каталог по умолчанию для сохранения этих файлов на веб-сервере? Есть ли какая-нибудь папка ASP.NET, например App_... или что-то в этом роде?

Что вы можете порекомендовать?


person Nagelfar    schedule 20.09.2012    source источник


Ответы (5)


Если вы не хотите повторно использовать файлы, транслируйте файлы напрямую, не сохраняя их на диск.

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

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

person PHeiberg    schedule 20.09.2012
comment
Спасибо за Ваш ответ! Эта штука с потоковой передачей файлов без сохранения на диск звучит для меня очень интересно! Как я могу это сделать? - person Nagelfar; 20.09.2012
comment
@Nagelfar. Если вы используете MVC, вы можете увидеть этот вопрос. Если вы используете веб-формы, см. здесь. По сути, вы можете передавать поток любого типа (MemoryStream, если у вас нет физического файла) так, как показано в связанных примерах. - person PHeiberg; 20.09.2012
comment
@Nagelfar - если вы используете компонент для создания файлов PDF в памяти, обычно есть возможность записи файла в поток. То же самое касается библиотек CSV-файлов. Если вы создаете CSV-файлы самостоятельно, существует вопрос здесь о потоковой передаче CSV. - person PHeiberg; 20.09.2012

Вы можете создать свою подходящую папку для этой потребности

Вот список конкретных папок (но вам это не нужно):

App_GlobalResources, 
App_LocalResources, 
App_Resources
App_Themes
App_WebReferences)
App_Code
App_Data
App_Browsers

Здесь ссылка MSDN о структуре проекта

Ссылка: http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx

person Aghilas Yakoub    schedule 20.09.2012

Это действительно зависит от вас! Я бы порекомендовал вам поместить их в подпапку вашего решения, чтобы они были автономными, и вы могли легко контролировать безопасность, не беспокоясь о папках, расположенных дальше по дереву.

person Oliver Gray    schedule 20.09.2012

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

person Neil Wood    schedule 20.09.2012

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

person Ben    schedule 21.09.2012