Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / изображение в базу и из базы / 25 сообщений из 47, страница 1 из 2
24.05.2020, 23:56
    #39961463
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изображение в базу и из базы
Добрых суток,

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

FIL23

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

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

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

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

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

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

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

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

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

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

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


Да.


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

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

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


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

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

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

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


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

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


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

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


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

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


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

Как вариант, можно использовать не ID объекта, а ввести дополнительное поле. Например, на случай переноса данных из одной базы в другу.
...
Рейтинг: 0 / 0
26.05.2020, 00:37
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / изображение в базу и из базы / 25 сообщений из 47, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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