Поэтому многие говорят, что не хранят файлы в базе данных, а сохраняют их (фактические файлы) в папке сервера и сохраняют путь к базе данных.
Проблема в том, что файлы могут быть доступны напрямую через URL-адреса. Например, если я помещаю iamge в папку с именем: img, тогда люди могут легко получить к нему доступ, например, этот URL: http://domain.com/img/photo.jpg
В моем веб-приложении будет много изображений и документов, которые должны быть доступны только после входа в систему.
Я помещаю их в папку App_Data, потому что это защищенная папка, чтобы избежать их доступа неавторизованных пользователей, но угадайте, что я не могу получить в моем коде...
Например: я не могу получить изображение профиля пользователя и отобразить его на странице...
База данных SQL:
.aspx:
<asp:Image ID="imgProfile" runat="server" Width="150" Height="150" ToolTip="Profile Picture" />
С# код в событии Page_Load:
//Get name and path and save to ProfilePicture object
//.....
imgProfile.ImageUrl = ProfilePicture.path + ProfilePicture.name;
Браузер (Chrome) сказал:
Not allowed to load local resource: file:///C:/users/..../App_Data/User/userPicture/1/photo.JPG localhost:55700/Modules/User/Account/ProfilePicture.aspx:196
Failed to load resource: the server responded with a status of 404 (Not Found)
Итак, что является лучшим решением здесь, похоже, что я должен поместить их в базу данных...
AppData - это системный каталог, зависящий от пользователя.
его можно найти в c:\users\[username]\appdata
вы должны быть осторожны с тем, к чему обращается приложение fordata forlder IIS, поскольку он, вероятно, работает под другим пользователем, чем ваш рабочий стол
Теперь, когда содержимое appdata доступно на вашем веб-сайте, это очень плохая практика.
правильный способ сделать это, и если вы настаиваете на скрытии изображений, вы должны создать обработчик (.ashx), который будет считывать файл изображения и возвращаться обратно.
<asp:Image>
.