powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / изображение в базу и из базы
25 сообщений из 47, страница 1 из 2
изображение в базу и из базы
    #39961463
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток,

Пару вопросов про хранение изображения в БД.

Первый: как хранить? ну т.е. просто потоком загружать в блоб поле или сначала лучше кодировать в BASE64, а потом загружать в блоб поле?

Второй: как загружать и как читать рисунок в.из БД?
(пробовал в гугле найти, но то ли голова не думает в 4 часа ночи, то ли я торможу) Во всяком случае буду рад простому рабочему примеру.

Проловал через TstreamMemory загнать и прочитать, не выходит аленький цветочек.


Спасибо.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961473
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23Проловал через TstreamMemory

Потому что тут нужен TBlobStream.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961474
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23
или сначала лучше кодировать в BASE64

Лучше, конечно, закодировать: база бОльшего объема выглядит солиднее, да и процессор воздух согреет.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961491
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему-то очень редко задаётся встречный вопрос. "А вы уверены что ваши изображения нужно хранить именно в базе?"
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961497
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
northener
Почему-то очень редко задаётся встречный вопрос. "А вы уверены что ваши изображения нужно хранить именно в базе?"

Серьезных причин хранить "не в базе" не осталось. Ну, кроме желания знатно потрахаться.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961509
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
northener
Почему-то очень редко задаётся встречный вопрос. "А вы уверены что ваши изображения нужно хранить именно в базе?"


Да.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961511
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще интересный момент.

Где то мельком на форумах видел , что можно считать и записать только bmp и jpg а вот c png будут проблемы, там по другому надо считывать - записывать.

(Поэтому я и думаю про BASE64)

Насколько это утверждение верно?
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961515
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
еще интересный момент.

Где то мельком на форумах видел , что можно считать и записать только bmp и jpg а вот c png будут проблемы, там по другому надо считывать - записывать.

(Поэтому я и думаю про BASE64)

Насколько это утверждение верно?


А вот с png+BASE64 проблем не будет :)

В блобах Вы храните последовательность байт. Что там хранится базе глубоко фиолетово: хоть bmp, хоть png, хоть текстовое описание картинки.

Это имеет значение уже тогда, когда ты уже данные из блоба вытащил и сам решаешь: что с ними делать: то ли отправить на принтер, то ли сохранить в файл.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961516
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

Где собрались хранить, о какой субд речь?

В целом идея дурацкая, обычно хранят ссыкли на файлы и хэши, потому что картинок будет очень много их придётся куда-то перетаскивать, перезаливать и т.п. С базой это всё делать будет не удобно. Но вы, конечно, смотрите на проблему в контексте дельфи разработки, а не про какое-то там удобно/неудобно поддерживать.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961517
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
еще интересный момент.

Где то мельком на форумах видел , что можно считать и записать только bmp и jpg а вот c png будут проблемы, там по другому надо считывать - записывать.

Насколько это утверждение верно?


У поля с блобом есть подтипы.
Создай поле для блоба двоичного и пиши туда любые файлы.

FIL23

(Поэтому я и думаю про BASE64)

Забей. Это не для этих случаев.
"Это вам не это".

Ну и наверняка могут быть тонкости в СУБД и компонентах доступа.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961526
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
Проловал через TstreamMemory загнать и прочитать, не выходит аленький цветочек.

Как пробовал? Там же всё проще некуда.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961530
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумай о хранении файлов на диске, а не в базе.
1. Хранить в базе относительные ссылки на файлы.
2. Не хранить даже ссылки. Просто папки на диске именовать как ID объекта.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961551
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Подумай о хранении файлов на диске, а не в базе.
1. Хранить в базе относительные ссылки на файлы.
2. Не хранить даже ссылки. Просто папки на диске именовать как ID объекта.

По хорошему и диск не лучшее решение. Более дальновидно написать сервис, который умеет записывать и загружать файл в любой источник. Будь то облако, ftp, сетевая шара и отдельная база. А у каждого файла прописывать источник и пусть сервис (модуль на стороне клиента) с ним разбирается.
Плюсом будет возможность управлять местом хранения по различным признакам: мелкие или не важные файлы можно хранить в базе или в файлопомойке, важные документы - на фтп или в облаке и т.п.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961564
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Серьезных причин хранить "не в базе" не осталось. Ну, кроме желания знатно потрахаться.

Стоимость — серьезная причина?
Если изображений много, то хранить их на диске намного "дешевле", чем в базе данных.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961566
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты ведь уже спрашивал ? Неужели так и не уразумел?

FIL23
пробовал в гугле найти

ну ты даешь
http://www.ibase.ru/ibx/
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961567
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно стоимость владения ресурсами БД во много раз дороже ресурсов к примеру сети хранения
или какого нибудь S3.

Кроме того исторически БД создавалась для транзакционных действий над маленькими атомарными
полями типа varchar, numeric и никак не оптимизировалась для хранения например картинок *jpg
фотокачества которые могут быть в среднем по 30 Мб. База будет исполнять большое число ненужных
действий чтобы просто отдать тебе картинку. Кроме того загружая ценный канал который у тебя
задействован для табличек.

Вобщем если систему сильно масштабировать (увеличивать число баз и хранилищ картинок) то
естественным возникнет архитектурный вопрос чтобы вышвырнуть из БД вообще все блобы над
которыми нет транзакций кроме просто создания их 1 единственный раз.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961611
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док
ты ведь уже спрашивал ? Неужели

"А поговорить" - (с).
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961647
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
northener
Почему-то очень редко задаётся встречный вопрос. "А вы уверены что ваши изображения нужно хранить именно в базе?"


Да.


Хранить в БД картинки - ЗЛО
Только если это обосновано подтверждением корректности отображения конкретной картинки
Например: Если к файловому хранилищу имеют доступ третьи лица и могут подменить файл.
Но можно хранить в БД CRC и проверять при загрузке файла. Если не совпадает или удалили, то орать - "НАС ВЗЛОМАЛИ!!"

А так стандартно:
Поднять http сервер. и хранить картинки на нем в файловой системе. В БД хранить только ссылку и CRC
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961656
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

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


wadman
Более дальновидно написать сервис

их, облачная родная программа синхронизации с облаком и будет уже готовый написанный сервис
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961665
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
это уже не важно, храни на диске, а к папке с фотками подключи облако с их родной программой синхронизации, которое будет синхронизировать фотки на удаленных ПК, привязка к ID сохраняется...

К какому ИД? В виде имени файла? Если имел дело с облаками, то должен понимать выгоду от прямого обращения к нему, нежели в виде костыля через файловую систему. Из самых очевидных - версионность и история.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961674
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
X11
это уже не важно, храни на диске, а к папке с фотками подключи облако с их родной программой синхронизации, которое будет синхронизировать фотки на удаленных ПК, привязка к ID сохраняется...

К какому ИД? В виде имени файла? Если имел дело с облаками, то должен понимать выгоду от прямого обращения к нему, нежели в виде костыля через файловую систему. Из самых очевидных - версионность и история.


ID генерировать при сохранении файла. Например - GUID в имени.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961675
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нестандартное мышление
wadman
пропущено...

К какому ИД? В виде имени файла? Если имел дело с облаками, то должен понимать выгоду от прямого обращения к нему, нежели в виде костыля через файловую систему. Из самых очевидных - версионность и история.


ID генерировать при сохранении файла. Например - GUID в имени.

На всё готовы лишь-бы делом не заниматься.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961715
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Нестандартное мышление
пропущено...


ID генерировать при сохранении файла. Например - GUID в имени.

На всё готовы лишь-бы делом не заниматься.


Ага. Еще срок действия файла указывать. И события, по его истечению.
Вопрос был в том - как хранить бинарник в БД?
Если толстый канал и SSD диски на базе, то можно хоть 8к видео стримить.
Но тут вопрос в оптимальном решении
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961854
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего можно и надо генерировать. Пусть имена файлов будут исходные.
А вот имя папки - это ID объекта.

Как вариант, можно использовать не ID объекта, а ввести дополнительное поле. Например, на случай переноса данных из одной базы в другу.
...
Рейтинг: 0 / 0
изображение в базу и из базы
    #39961939
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понятный дискус, я спросил как лучше хранить изображение в БД. (а не где хранить)

на счет конвертации в BASE64 что будет место занимать и проц греть - согласен, поэтому отпадает.



Возвращаемся к теме . возможно это и есть конечное решение..

Значит записываю я информацию в БД так (это просто пример). (может кто предложит поизящней код).
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  perIBQuery:TIBQuery ;
  Stm: TMemoryStream;

begin
perIBQuery:=my_initialization_TIBQuery_insert(perIBQuery);
perIBQuery.Active:=false;
perIBQuery.SQL.Clear;
perIBQuery.SQL.Add('insert into INVENTORY_IMAGE '
                  +'('
                  +'IMAGE_ '
                  +')'

                  +' values '
                  +'('
                  +':perIMAGE_ '
                  +')' );


 Stm := TMemoryStream.Create;
 Image1.Picture.Graphic.SaveToStream(Stm);
 Stm.Position:=0;
 perIBQuery.ParamByName('perIMAGE_').LoadFromStream( Stm, ftBlob);  

 perIBQuery.ExecSQL;
 perIBQuery.Transaction.Commit;
 stm.Free;
end;



В БД данные попадают.

Теперь извлечение данных, выгружаем данные из бд и определяем что это jpeg или bpm , после выводим изображение в image
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
procedure TForm1.Button2Click(Sender: TObject);
var
  perIBQuery:TIBQuery ;
  Ss  : TStringStream;
  St : string ;
  Code:word;
begin
perIBQuery:=my_initialization_TIBQuery_insert(perIBQuery); 
perIBQuery.Active:=false;
perIBQuery.SQL.Clear;
perIBQuery.SQL.Add ('select * from INVENTORY_IMAGE where ID =8' );
perIBQuery.Active:=true;
perIBQuery.Last;

st := perIBQuery.FieldByName('IMAGE_').AsString;
Ss := TStringStream.Create(st);

if Ss.Size > 0 then
  begin
  ss.Read(Code,SizeOf(Code));
  ss.Seek(0,0);
    case Code of
      $4D42: begin  //BMP
        Image1.Picture.Graphic:=TBitmap.Create;
        Image1.Picture.Graphic.LoadFromStream(Ss);
      end;
      $D8FF: begin   //JPEG
        Image1.Picture.Graphic:=TJPEGImage.Create;//TBitmap.Create;
        Image1.Picture.Graphic.LoadFromStream(Ss);
      END;
    end;
  end;
  Ss.Free;
end;
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / изображение в базу и из базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]