powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить байты из блоба?
25 сообщений из 48, страница 1 из 2
Как получить байты из блоба?
    #40102141
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Че-та поиском не нашел.

Можно как-то откастовать блоб, чтобы получить на клиента несколько первых байтов?
=================
Док.

Win10 Ultim x64/Deb 10 amd64/Darwin Cocoa:
FB 3.0.7.33374, Lazarus 2.3.0(trunk); FPC 3.3.1(trunk)
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102143
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в октет и сабстрингом
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102144
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Код: sql
1.
2.
3.
SELECT
  CAST( SUBSTRING( BLOB_FIELD FROM 1 FOR 3 ) AS VARCHAR(3) )
FROM TABLE_NAME
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102145
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, а БЛОБ-то какой?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102146
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Да, правильнее AS VARCHAR(3) CHARACTER SET OCTETS, но хз как там клиент (умеет ли)
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102147
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
кстати, а БЛОБ-то какой?

ты, как всегда, краток :)

Да, забыл указать, блоб бинарный
Код: sql
1.
CREATE DOMAIN DMN_BLOBIMG AS BLOB SUB_TYPE 0 SEGMENT SIZE 80;
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102153
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Да, правильнее AS VARCHAR(3) CHARACTER SET OCTETS, но хз как там клиент (умеет ли)

Код: sql
1.
2.
3.
4.
SELECT
  CAST(SUBSTRING(PHOTOS FROM 1 FOR 4) AS VARCHAR(4) CHARACTER SET OCTETS) AS BYTES_FLD
FROM TBL_PEOPLE
WHERE ID = 1


Спасибо, все робит :)
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102154
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
Спасибо, все робит :)

Тут похоже на определение типа картинки/документа, дак я-бы лучше это делал в отдельное поле и перед отправкой файла.
Да еще и на клиенте, там возможностей поболе будет.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102159
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Док
Спасибо, все робит :)

Тут похоже на определение типа картинки/документа, дак я-бы лучше это делал в отдельное поле и перед отправкой файла.
Да еще и на клиенте, там возможностей поболе будет.


все верно, только с той разницей, что хранение расширения и способ загрузки картинки в визуальные компоненты уже реализованы. Вот только пока не определился, где дешевле по трудозатратам: анализировать по расширению или по байтам (последний вариант мне кажется изящнее :)
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102160
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
анализируй перед загрузкой БЛОБ-а в базу.
на клиенте.
и добавь в таблицу поле - идентификатор (тип) выявленной сигнатуры.
по-хорошему, ещё конечно надо бы создать доп.таблицу - справочник типов.
но это не обязательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102161
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийи добавь в таблицу поле - идентификатор (тип) выявленной сигнатуры.

В зависимости от назначения этот идентификатор может быть имя класса-обработчика
данного изображения или MIME-название для скармливания системе/браузеру/и т.д.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102189
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
YuRock
Да, правильнее AS VARCHAR(3) CHARACTER SET OCTETS, но хз как там клиент (умеет ли)

Код: sql
1.
2.
3.
4.
SELECT
  CAST(SUBSTRING(PHOTOS FROM 1 FOR 4) AS VARCHAR(4) CHARACTER SET OCTETS) AS BYTES_FLD
FROM TBL_PEOPLE
WHERE ID = 1



Спасибо, все робит :)
Опасность в том, что если среди этих 4-х символов есть 0-символы, то клиент может обрезать до них, если тупой (дельфовый IBX именно такой, во всяком случае был).
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102191
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет. Поэтому обычно вьюеры ориентируются на параллельно с файлом приходящий content-type , например, image/jpeg , или в крайнем случае на расширение.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102193
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет.

Из Вики:
BITMAPFILEHEADER — 14-байтная структура, которая располагается в самом начале файла.
00 2 bfType WORD Отметка для отличия формата от других (сигнатура формата). Может содержать единственное значение 4D42/424D (little-endian/big-endian).
...

4D42/424D - это буквы MB или BM в ANSI кодировке.
Ради любопытства глянул пару картинок BMP - везде есть буквы BM.
Хотя, всякое бывает...
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102196
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i
shalamyansky
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет.

Из Вики:
BITMAPFILEHEADER — 14-байтная структура, которая располагается в самом начале файла.
00 2 bfType WORD Отметка для отличия формата от других (сигнатура формата). Может содержать единственное значение 4D42/424D (little-endian/big-endian).
...

4D42/424D - это буквы MB или BM в ANSI кодировке.
Ради любопытства глянул пару картинок BMP - везде есть буквы BM.
Хотя, всякое бывает...У меня с bmp, gif, jpeg, png не было проблем никогда при загрузке (определении типа картинки) по мервым байтам.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102212
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
У меня с bmp, gif, jpeg, png не было проблем никогда при загрузке (определении типа картинки) по мервым байтам.

Да, эти форматы имеют адекватные заголовки с определенной сигнатурой (флагом).
Так что "флаг в руки"... :-)
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102213
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
анализируй перед загрузкой БЛОБ-а в базу.
на клиенте.


хорошая мысль. Особенно, если картинке до этого намеренно изменили расширение. В наст. момент в базу кладется расширение, указанное в имени файла.
Мне подумалось, что поле с расширением файла можно будет похерить, если достаточно будет проанализировать первые 3-4 байта блоба

shalamyansky
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет.

а вики говорит, что это не так
0x4d42/0x424d

YuRock
У меня с bmp, gif, jpeg, png не было проблем никогда при загрузке (определении типа картинки) по мервым байтам.

в Лазаре по дефолту у TOpenPictureDialog проперть Filter выглядит примерно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Graphic (*.png;*.xpm;*.bmp;*.cur;*.ico;*.icns;*.jpeg;*.jpg;*.jpe;*.jfif;*.tif;*.tiff;*.gif;*.pbm;*.pgm;*.ppm)|*.png;*.xpm;*.bmp;*.cur;*.ico;*.icns;*.jpeg;*.jpg;*.jpe;*.jfif;*.tif;*.tiff;*.gif;*.pbm;*.pgm;*.ppm|
Portable Network Graphic (*.png)|*.png|
Pixmap (*.xpm)|*.xpm|
Bitmaps (*.bmp)|*.bmp|
Cursor (*.cur)|*.cur|
Icon (*.ico)|*.ico|
Mac OS X Icon (*.icns)|*.icns|
Joint Picture Expert Group (*.jpeg;*.jpg;*.jpe;*.jfif)|*.jpeg;*.jpg;*.jpe;*.jfif|
Tagged Image File Format (*.tif;*.tiff)|*.tif;*.tiff|
Graphics Interchange Format (*.gif)|*.gif|
Portable PixMap (*.pbm;*.pgm;*.ppm)|*.pbm;*.pgm;*.ppm|
All files (*.*)|*.*|


Тут поневоле задумаешься, а сколько форматов будет достаточно для кроссплаформы? :)
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102256
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> если картинке до этого намеренно изменили расширение.

Расширение вообще не имеет значения.
Его может не быть или быть "неправильным".
Файл 'зелёный.крокодил' может быть BMP,
JPG, TXT, EXE или файлом базы данных.

> В наст. момент в базу кладется расширение, указанное в имени файла.
> Мне подумалось, что поле с расширением файла можно будет похерить,

Не можно, а нужно. Я в своё время делал примерно, как
МП описал - был перечень "поддерживаемых форматов",
один из которых "выбирался" на клиенте. В БД ничего
не анализировалось, только хранилось.

> Тут поневоле задумаешься, а сколько форматов
> будет достаточно для кроссплаформы? :)

Это решать тебе (исходя из логики ПО), а не кросс-платформе. :)
IIRC, мне в своё время для графики хватило BMP/PNG/JPG, хотя
по идее какой-нибудь TIFF не помешал бы для многостраничности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102301
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Расширение вообще не имеет значения.
Его может не быть или быть "неправильным".

Этим много кто страдает, когда вместо "нормального" расширения приходит webp (или как его там).
Не раз сталкивался. Ирфаном открываю, а он предлагает его переименовать с настоящим расширением.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102314
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле Imageformat-ов очень много. Вот, к примеру, XnViewMP поддерживает 500 форматов:
https://www.xnview.com/en/image_formats/
Для практической работы с БД, я думаю, хватит и десятка самых распостраненных.
И, конечно, самый надежный способ анализировать по сигнатуре в файле.
Что ещё тут обсуждать?
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102316
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.10.2021 12:30, d7i пишет:
> Вот, к примеру, XnViewMP поддерживает 500 форматов:
> https://www.xnview.com/en/image_formats/

у них там и CSV среди графических чалится ;)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102378
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет. Поэтому обычно вьюеры ориентируются на параллельно с файлом приходящий content-type , например, image/jpeg , или в крайнем случае на расширение.

Виноват, ляпнул по старой памяти, не проверив. Bmp имеет сигнатуру ВМ. Наверное, я ico имел в виду. Там нули в начале, не очень надежный способ идентификации типа.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102385
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить в отдельных полях полезно и content-type, и размер в байтах, и размер в пикселах, и даже хеш файла. Это несколько избыточно, зато потом поиск эффективно можно организовать. Например, ограничить выборку только маленькими (меньше 1MB) картинками типа gif. Даже если сейчас нет такой нужды, когда-нибудь обязательно возникнет. А при наличии хеша можно быстро найти по известной картинке (и более ничего) соответствующую запись.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102396
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вот весьма полезная задача - найти дубли картинок. Шарашить квадратичным поиском сравнения блобов тяжеловато будет, особенно на емких базах. А если есть хеш и индекс по нему - милое дело.
...
Рейтинг: 0 / 0
Как получить байты из блоба?
    #40102404
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хэш тут как раз ни к чему, поскольку он для почти одинаковых картинок выдаст
совершенно разные значения. Тут "антихэш" какой-то нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить байты из блоба?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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