Где сохранить HTML и изображения?
У меня есть проект, в котором пользователь компании будет использовать HTML-редактор winform, чтобы добавить текст и картинки для конкретных клиентов. Клиенты будут смотреть эту информацию на веб-сайте.
Какой лучший способ справиться с этим? Если бы это был только текст HTML, то я мог бы сохранить все в базе данных и не иметь проблем с его отображением. Но сотрудник хочет умение показывать фотографии...
Сохраняю ли я изображения в виде файла в каком-либо общедоступном месте, чтобы веб-сайт и программа winform могли их видеть? Проблема здесь будет в том, где находится лучшее общественное место для хранения фотографий. Веб-сервер будет заблокированным сервером, к которому никто не имеет доступа. Могу ли я получить файл из нелокального каталога из ASP.Net?
Сохраняю ли я изображения в базе данных и делаю ли программу достаточно умной, чтобы заменить теги источника изображения изображением из базы данных? Я думал, что это может быть сложно (определенно в Интернете... если кто-то предлагает это, можете ли вы дать мне несколько примеров C# о том, как сделать это в winform и в Интернете?)
Я знаю, что кто-то должен был сделать это где-то и преуспел...
5 ответов
Я бы предложил использовать базу данных для хранения пути к локальному изображению (если это возможно в вашей настройке)
Например, физическое изображение будет сохранено в следующем пути:
/App_Themes/Web/images/userfiles/YOURIMAGENAME.jpg
и просто сохранить следующее в базе данных
YOURIMAGENAME.jpg
Это будет означать, что у вас может быть что-то вроде следующего:
<asp:Image ID="imgImage" runat="sever" />
protected void Page_Load(object sender, EventArgs e)
{
//Your data-access code here
//image.ImageName is provided by your data access code.
imgImage.ImageUrl = string.Format("/App_Themes/Web/images/userfiles/{0}", image.ImageName)
}
Пожалуйста, посмотрите это
Хранение изображений в БД - да или нет?
и другие старые вопросы по этому вопросу. На мой взгляд, любой выбор возможен и законен, как и комбинация обоих (хранение ссылок на файлы в базе данных). Вы должны принять решение на основе конкретных обстоятельств в вашем проекте (которые вы не предоставили), таких как
- ожидаемое количество изображений / файлов
- возможности и особенности производительности конкретной базы данных, которую вы будете использовать, в отношении хранения больших двоичных объектов
Если использование файловой системы невозможно, рассмотрите возможность хранения ваших изображений в облачном хранилище, например Amazon S3.
Вы можете настроить объекты S3 так, чтобы они были общедоступными для чтения, но частными для записи, чтобы только ваше программное обеспечение могло добавлять изображения в S3, но любой пользователь в Интернете мог их просматривать. В зависимости от ваших требований безопасности вы можете либо кодировать секретные ключи S3 в своем приложении WinForms для создания URL-адресов PUT, либо создать на сервере приложений простой веб-сервис, который аутентифицирует пользователя и использует секретные ключи на сервере для создания PUT-URL. Затем PUT URL могут быть возвращены клиенту, который может использовать для загрузки данных изображения.
Используя S3, вы затем загружаете изображения, используя HTTP PUT, и редактор, и веб-браузер получают доступ к изображениям, как обычно, с помощью HTTP GET. Доступны библиотеки C# и множество примеров кода в Интернете для доступа к S3.
Вы также можете сделать то же самое с вашими данными HTML.
Обратите внимание, что с S3 связаны затраты ( см. Ценообразование), но если предположить, что затраты не выходят за рамки, это отличное решение проблемы такого типа.
Да, если вы не планируете ограничивать доступ к этим изображениям. Если вы это сделаете, храните их вдали от корня www и отправьте в браузер по сценарию
Нет. Лучше хранить изображения на диске, а относительный путь к ним - в БД. База данных не является правильным местом для хранения файлов.
Вы можете легко сохранить изображения в базе данных, а затем получить их. Для отображения изображений из базы данных вы можете использовать страницу asp.net (см. Эту статью) или HttpHandler.
Вы также можете хранить файлы в локальной папке. Можно использовать регулярные операции чтения / записи файлов. Чтобы это работало, пользователю ASP.NET ([Local Machine]\ASPNET или NETWORK SERVICE) необходим доступ на чтение / запись к этой папке. С использованием удаленной папки все сложнее, и вы можете создать дыру в безопасности, пытаясь это сделать.
В заключение я считаю, что лучшим решением будет использование локальной папки. Если это невозможно, избегайте экзотических решений (FTP, олицетворение пользователя, веб-сервис для загрузки / загрузки изображений) и используйте базу данных.