Где сохранить HTML и изображения? - PullRequest
1 голос
/ 31 октября 2009

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

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


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

  2. Сохраняю ли я изображения в базе данных и делаю ли программу достаточно умной, чтобы заменять теги источника изображения изображением из базы данных? Я думал, что это может быть сложно (определенно в Интернете ... если кто-то предлагает это, можете ли вы дать мне несколько примеров C # о том, как сделать это на winform и в Интернете?)

Я знаю, что кто-то еще должен был сделать это где-то и преуспел ...

Ответы [ 5 ]

4 голосов
/ 03 ноября 2009

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

Например, физическое изображение будет сохранено в следующем пути:

/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)
}
0 голосов
/ 05 ноября 2009

Если использование файловой системы невозможно, рассмотрите возможность хранения ваших изображений в облачном хранилище, например Amazon S3 .

Вы можете настроить объекты S3 так, чтобы они были общедоступными для чтения, но частной записью, чтобы только ваше программное обеспечение могло добавлять изображения в S3, но любой пользователь в Интернете мог их просматривать. В зависимости от ваших требований безопасности вы можете либо кодировать секретные ключи S3 в своем приложении WinForms для создания URL-адресов PUT, либо создать на сервере приложений простой веб-сервис, который аутентифицирует пользователя и использует секретные ключи на сервере для создания URL-адресов PUT. Затем PUT URL могут быть возвращены клиенту, который можно использовать для загрузки данных изображения.

Используя S3, вы затем загружаете изображения, используя HTTP PUT, и редактор и веб-браузер получают доступ к изображениям, как обычно, с помощью HTTP GET. Доступны библиотеки C # и множество примеров кода в Интернете для доступа к S3.

Вы могли бы сделать то же самое с вашими данными HTML.

Обратите внимание, что с S3 связаны затраты ( см. Расценки ), но если предположить, что затраты находятся в допустимых пределах, это отличное решение проблемы такого типа.

0 голосов
/ 02 ноября 2009

Пожалуйста, посмотрите это

Хранение изображений в БД - да или нет?

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

  • ожидаемое количество изображений / файлов
  • возможности и особенности производительности конкретной базы данных, которую вы будете использовать, в отношении хранения больших двоичных объектов
0 голосов
/ 03 ноября 2009

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

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

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

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

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

...