Как сохранить картинку в MySQL-базу?

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Всем доброго дня! Может кто привести пример кода сниппета для сохранения файла картинки в базу данных MySQL, а также обратной процедуры - выгрузки файла из BLOB-поля БД в файл?
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Нашёл решение. Пример кода:
var command = new MySql.Data.MySqlClient.MySqlCommand();
string strConnectionString = "Data source=localhost;UserId=root;Password=bla;database=bla;Charset=utf8;";
command.Connection = new MySql.Data.MySqlClient.MySqlConnection(strConnectionString);
command.Connection.Open();

string strImageInsertRequest = "INSERT INTO zp_profiles (image) VALUES (@image);";
MySql.Data.MySqlClient.MySqlCommand ImageInsertDBCommand = new MySql.Data.MySqlClient.MySqlCommand(strImageInsertRequest, command.Connection)

if (File.Exists(strImageFilePath)) {
FileStream fsImage;
BinaryReader brImage;
byte[] ImageData;
fsImage = new FileStream(strImageFilePath, FileMode.Open, FileAccess.Read);
brImage = new BinaryReader(fsImage);
ImageData = brImage.ReadBytes((int)fsImage.Length);
brImage.Close();
fsImage.Close();
ImageInsertDBCommand.Parameters.AddWithValue("@file_avatar", ImageData);
}else{
ImageInsertDBCommand.Parameters.AddWithValue("@file_avatar", null);
}

ProfileInsertDBCommand.ExecuteNonQuery();

command.Connection.Close();
 
  • Спасибо
Реакции: pym933 и Astraport

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
А можно вопрос зачем такое извращение? :-)
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
Файлики, однако быстрее и надежнее, в рамках персоналок. В частности из-за особенностей архитектуры. По распространенной аналогии с феррари и автобусом.
Кстати, файлики и на автобусах быстрее, иначе бы Google не использовал этот формат для своих баз.
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Файлики, однако быстрее и надежнее, в рамках персоналок. В частности из-за особенностей архитектуры. По распространенной аналогии с феррари и автобусом.
Кстати, файлики и на автобусах быстрее, иначе бы Google не использовал этот формат для своих баз.
Под "этим" форматом вы подразумеваете NOSQL БД? Это уже даже не крупные, а гигантские проекты. В моём случае всё несколько проще.
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Раз уж снова вернулся к этой теме. Вот образец кода для сохранения картинки из базы в файл на диске:

Код:
SQLReader.Read();

UInt32 intMaxFileSize = 10000; //создаём буфер (размер в килобайтах)
byte[] rawData = new byte[intMaxFileSize ];

SQLReader.GetBytes(SQLReader.GetOrdinal("file_avatar"), 0, rawData, 0, (int)intMaxFileSize);

Image image1 = new Bitmap(new MemoryStream(rawData));
image1.Save(@"D:\test2.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
 
  • Спасибо
Реакции: pym933 и mux76

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
По сути, любой формат баз данных отличный от SQL можно назвать NOSQL :D
Mongo тоже подходит. Но речь была базе данных основанной на файловых дескрипторах. По сути, вместо таблиц используются названия каталогов, а вместо ячеек - файлы. Производительность отличается в несколько раз.
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Для больших проектов база данных как раз более приемлемое решение, чем куча файликов на диске.
Еще раз объясни нах базу нагружать ИЗОБРАЖЕНИЯМИ?
Если можно хранить пути к ним...
Просто есть пара баз на 10млн записей вот одна из них содержит пути к изображениям ) вес 3гб... если туда еще пихнуть сами изображения то я хз че будет...
Вот и пытаюсь понять нахуя?!
 
  • Спасибо
Реакции: svaminar

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
В базе целесообразней хранить пути на изображения, Gfoblin правильную мысль подкидывает, а то проблемы могут возникать потом из-за объёмов баз, например, при экспорте и т.д. если это mysql и если ты не знаешь его на уровне консоли.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)