Где сохранить HTML и изображения?

У меня есть проект, в котором пользователь компании будет использовать HTML-редактор winform, чтобы добавить текст и картинки для конкретных клиентов. Клиенты будут смотреть эту информацию на веб-сайте.

Какой лучший способ справиться с этим? Если бы это был только текст HTML, то я мог бы сохранить все в базе данных и не иметь проблем с его отображением. Но сотрудник хочет умение показывать фотографии...


  1. Сохраняю ли я изображения в виде файла в каком-либо общедоступном месте, чтобы веб-сайт и программа winform могли их видеть? Проблема здесь будет в том, где находится лучшее общественное место для хранения фотографий. Веб-сервер будет заблокированным сервером, к которому никто не имеет доступа. Могу ли я получить файл из нелокального каталога из ASP.Net?

  2. Сохраняю ли я изображения в базе данных и делаю ли программу достаточно умной, чтобы заменить теги источника изображения изображением из базы данных? Я думал, что это может быть сложно (определенно в Интернете... если кто-то предлагает это, можете ли вы дать мне несколько примеров 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 связаны затраты ( см. Ценообразование), но если предположить, что затраты не выходят за рамки, это отличное решение проблемы такого типа.

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

  2. Нет. Лучше хранить изображения на диске, а относительный путь к ним - в БД. База данных не является правильным местом для хранения файлов.

Вы можете легко сохранить изображения в базе данных, а затем получить их. Для отображения изображений из базы данных вы можете использовать страницу asp.net (см. Эту статью) или HttpHandler.

Вы также можете хранить файлы в локальной папке. Можно использовать регулярные операции чтения / записи файлов. Чтобы это работало, пользователю ASP.NET ([Local Machine]\ASPNET или NETWORK SERVICE) необходим доступ на чтение / запись к этой папке. С использованием удаленной папки все сложнее, и вы можете создать дыру в безопасности, пытаясь это сделать.

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

Другие вопросы по тегам