изображение в базе данных - PullRequest
       3

изображение в базе данных

5 голосов
/ 25 февраля 2011

Можно ли сохранить файл изображения (.jpg, .gif и т. Д.) В базе данных MYSQL? Или он просто хранится в системе и использует эталонный путь изображения?

Я использую ASP.NET C #, поэтому, если у вас есть пример кода, было бы здорово, если бы вы могли поделиться им.

Ответы [ 6 ]

6 голосов
/ 25 февраля 2011

Да, вы можете хранить файлы изображений (и любые другие файлы) в базе данных как двоичные данные.

В MySQL для этого можно использовать тип данных BLOB .

BLOB - это большой двоичный объект, который может содержать переменное количество данных. Четырьмя типами BLOB являются TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB. Они отличаются только максимальной длиной значений, которые они могут содержать. [...]

Значения BLOB обрабатываются как двоичные строки (байтовые строки). У них нет набора символов, а сортировка и сравнение основаны на числовых значениях байтов в значениях столбцов.

4 голосов
/ 25 февраля 2011

Прежде всего, пост, который очень похож на этот: Должен ли я хранить свои изображения в базе данных или папках?

Во-вторых, образец для хранения изображений в базе данных: http://www.dotnetcurry.com/ShowArticle.aspx?ID=129&AspxAutoDetectCookieSupport=1

По моему мнению, это зависит от того, хотите ли вы хранить изображения в вашей базе данных или в папках. Оба метода имеют свои плюсы и минусы.

Вот краткий комментарий с форумов asp.net:

Стоит ли хранить изображения в базе данных?

Около десяти лет назад я начал один из первые интернет-проекты - имидж банк данных. Мы должны были доставить изображения разных размеров и разрешения зарегистрированным пользователям. Каждое изображение было разработан как коллекция изображений, от миниатюры до самой высокой разрешающая способность. Самое большое изображение доступно было около 4 мб. Каждое изображение хранится в архиве занято всего 6 МБ.

Внутренняя база данных не работала на платформе Microsoft, но при условии поддержка BLOB-полей. Без особого дебаты решили хранить описания и др. Каталог информация в базе данных и хранить изображения как отдельные файлы под известный путь. Мы также храним в база данных достаточно информации для программное обеспечение для извлечения файла. Будучи рассчитанным на относительно небольшой количество зарегистрированных пользователей приложение никогда не показывало масштабируемость проблемы, и никто никогда не делал на команда или любые пользователи жалуются на производительность.

Может ли этот краткий опыт - особенно опыт относительно старого возраст программного обеспечения и базы данных технологии - быть использованы в качестве примера превосходство файлового хранилища над хранилищем базы данных? Конечно, нет, но читая между строк, как современные системы СУБД реализуют BLOB поля, я использовал этот опыт для сформулировать идею о хранении изображений и базы данных.

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

1 голос
/ 09 июля 2011

Возьми это ... Загрузка изображений ASP.NET с изменением размера Вы можете найти множество примеров.

1 голос
/ 25 февраля 2011

4GuysFromRolla.com имеет статью на эту тему, которую я использовал в качестве ссылки, когда писал код для хранения двоичных данных непосредственно в базе данных: http://www.4guysfromrolla.com/articles/120606-1.aspx

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

1 голос
/ 25 февраля 2011

Вы должны создать байтовый массив из образа и сохранить его в базе данных.

public static byte[] ConvertImageToByteArray(Image imageIn)
{
    var ms = new MemoryStream();
    imageIn.Save(ms, ImageFormat.Png);
    return ms.ToArray();
}

Чтобы преобразовать данные обратно в изображение:

public static Image ConvertByteArrayToImage(byte[] byteArrayIn)
{
    var ms = new MemoryStream(byteArrayIn);
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}
0 голосов
/ 25 февраля 2011

Моя компания в настоящее время использует базу данных с BLOB-данными для документов и изображений, и мы пытаемся переместить ее на хранение только ссылок на файлы на сервере. База данных - это много много ГБ, когда она должна быть 20 МБ. Я бы рекомендовал против BLOB, потому что это определенно замедляет работу БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...