Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить байты из блоба? / 25 сообщений из 48, страница 1 из 2
05.10.2021, 17:04
    #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
05.10.2021, 17:07
    #40102143
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
в октет и сабстрингом
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.10.2021, 17:08
    #40102144
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
Док,

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

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

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

Да, забыл указать, блоб бинарный
Код: sql
1.
CREATE DOMAIN DMN_BLOBIMG AS BLOB SUB_TYPE 0 SEGMENT SIZE 80;
...
Рейтинг: 0 / 0
05.10.2021, 17:35
    #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
05.10.2021, 17:38
    #40102154
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
Док
Спасибо, все робит :)

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

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


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

В зависимости от назначения этот идентификатор может быть имя класса-обработчика
данного изображения или MIME-название для скармливания системе/браузеру/и т.д.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.10.2021, 20:53
    #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
05.10.2021, 21:10
    #40102191
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет. Поэтому обычно вьюеры ориентируются на параллельно с файлом приходящий content-type , например, image/jpeg , или в крайнем случае на расширение.
...
Рейтинг: 0 / 0
05.10.2021, 21:33
    #40102193
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
shalamyansky
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет.

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

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

Да, эти форматы имеют адекватные заголовки с определенной сигнатурой (флагом).
Так что "флаг в руки"... :-)
...
Рейтинг: 0 / 0
05.10.2021, 23:41
    #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
06.10.2021, 10:01
    #40102256
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
Док> если картинке до этого намеренно изменили расширение.

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

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

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

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

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

Этим много кто страдает, когда вместо "нормального" расширения приходит webp (или как его там).
Не раз сталкивался. Ирфаном открываю, а он предлагает его переименовать с настоящим расширением.
...
Рейтинг: 0 / 0
06.10.2021, 12:30
    #40102314
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
На самом деле Imageformat-ов очень много. Вот, к примеру, XnViewMP поддерживает 500 форматов:
https://www.xnview.com/en/image_formats/
Для практической работы с БД, я думаю, хватит и десятка самых распостраненных.
И, конечно, самый надежный способ анализировать по сигнатуре в файле.
Что ещё тут обсуждать?
...
Рейтинг: 0 / 0
06.10.2021, 12:33
    #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
06.10.2021, 16:12
    #40102378
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить байты из блоба?
shalamyansky
Не все типы картинок имеют однозначную сигнатуру, например, bmp не имеет. Поэтому обычно вьюеры ориентируются на параллельно с файлом приходящий content-type , например, image/jpeg , или в крайнем случае на расширение.

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


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