Я сделаю это.У нас есть приложение, которое делает что-то похожее, что мы сделали, и мы сделали «сворачивать свои дела».Пользователи могут загружать файлы (изображения, документы, что угодно) через интерфейс нашего приложения, и эти файлы имеют разрешения, чувствительные к пользователю / компании / роли.Чтобы устранить некоторые проблемы безопасности и по нескольким другим причинам, мы реализовали следующее:
В веб-приложении мы создали папку «Активы», которая используется для хранения всехпользовательского контента.Затем мы используем подпапки для сегментирования контента (логотипы, файлы и т. Д.).
В файле web.config мы настроили эту папку так, чтобы она не была доступна из браузера (например,App_Data или папки bin) со следующими строками (Мы сделали это, чтобы гарантировать, что ни один из этих файлов не будет доступен напрямую из браузера. Подробнее о пункте # 4):
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="Assets"/>
</hiddenSegments>
</requestFiltering>
</security>
После загрузки файла мы храним соответствующую информацию о файле в базе данных (тип, размер, имя, комментарии).Это также позволяет нам связать информацию о роли и безопасности пользователя в файле.
Для извлечения файлов мы реализовали контроллер с набором действий, который принимает запрошенное имя файла ипользовательская информация (поскольку вы должны войти в систему) и возвращает файл из папки активов.Для конечного пользователя это выглядит так, как будто все файлы хранятся в / Files / Docs / FileID или чем-то подобном, но на самом деле это всего лишь интерфейсный «привратник» для самих файлов.Этот метод контроллера / действия возвращает 404, если вы не авторизованы или запрашиваете неверный файл.Для именования файлов мы просто генерируем идентификаторы GUID и называем файл «GUID.relevantExtension» (проверяя, что он уже не существует)
Я думаю, что для извлеченных уроков или еще чего, самая большая вещьзаключается в том, что вы не предоставляете файлы напрямую, особенно если пользователи не делятся контентом.Кроме того, и это, вероятно, является личным предпочтением и может привести к войне, если не быть осторожным, я не очень хорош в хранении файлов в базе данных, поскольку, похоже, это вызывает проблемы с производительностью подкачки и кэширования (не говоря уже о столбце файла SQL 2008).Надеюсь, это поможет!
РЕДАКТИРОВАТЬ - Еще одна мысль об этом, будьте осторожны при публикации из VS.Эти загруженные файлы не являются частью вашего решения, и если вы выполните публикацию Удалить тип загрузки, вы добавите файлы пользователей.Просто предостережение (был там: /)