Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как правильно передать в mssql бинарный файл в JSON  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Добрый день.

Использую MSSQL 2016

Почитав документацию работы с json написано "Строка в кодировке Base64".
Из программы мне необходимо сохранить файл jpeg в базе данных, передав его в "теле" json на сторону mssql

Вот код написанный на Delphi:
function TSchedulerFrm.GetResourcesJSONArr: string;
  var JSONArr     : TJSONArray;
      JSONObj     : TJSONObject;
begin
  JSONArr := TJSONArray.Create;
  try
    FResourceCacheEdit.First;
    while not FResourceCacheEdit.Eof do
    begin
      if FResourceCacheEdit.Edited = True then
      begin
        JSONObj := TJSONObject.Create;
       ..
       ..
        

        if not FResourceCacheEdit.MSEV1Miniature.isNULL then
          JSONObj.AddPair(TJSONPair.Create(fnSCH_MSEV1Miniature,   TNetEncoding.Base64.EncodeBytesToString(FResourceCacheEdit.MSEV1Miniature.AsBytes)));

        // Сохраняем объект в массив.
        JSONArr.AddElement(JSONObj);
      end;

      FResourceCacheEdit.Next;
    end;

    Result := JSONArr.ToString;
  finally
    JSONArr.Free;
  end;
end;


на уровне mssql данные пытаюсь читать след. образом:

SELECT
	  [MSEV1Miniature]
 FROM OPENJSON(@ResourcesJSONArr) WITH (
      
      [MSEV1Miniature]				VARBINARY(MAX)	'$.MSEV1Miniature'
    )


Исходный файл имеет размер 11556, то что сохраняется в БД имеет больший размер 11859. При этом если посмотреть "поток" данных, то в самом начале он идентичен, к середине потока появляется "какой-то мусор"... но самое интересное файл заканчивается тем же потоком что и исходный.

Я правильно понимаю, что полученный поток данных в виде текста в mssq я должен перекодировать из Base64 и только потом сохранить в БД?
17 июл 19, 09:05    [21928237]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно передать в mssql бинарный файл в JSON  [new]
aleks222
Member

Откуда:
Сообщений: 952
Осподе, милосердный! Какой бред.

1. JSON = обычная символьная строка.

2. Передача бинарных данных в строке JSON элементарна. Даже документацию можно не читать. Я к тому, что конструкторы JSON сами сообразят в что конвертить бинари.

3. @ResourcesJSONArr глазками то осмотреть и миру показать не судьба?

ЗЫ. Для пробы можно передавать 10-15 байт.
Если опыта с MS SQL поболе - можно собрать JSON на стороне сервера и посмотреть как оно должно выглядеть.
Сравнить с тем, что прилетает из вашей проги.
17 июл 19, 09:24    [21928253]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно передать в mssql бинарный файл в JSON  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
aleks222
Осподе, милосердный! Какой бред.

1. JSON = обычная символьная строка.

2. Передача бинарных данных в строке JSON элементарна. Даже документацию можно не читать. Я к тому, что конструкторы JSON сами сообразят в что конвертить бинари.

3. @ResourcesJSONArr глазками то осмотреть и миру показать не судьба?

ЗЫ. Для пробы можно передавать 10-15 байт.
Если опыта с MS SQL поболе - можно собрать JSON на стороне сервера и посмотреть как оно должно выглядеть.
Сравнить с тем, что прилетает из вашей проги.


1. Вы прям мир открыли.
2. Приведите пример... в дельфях без перекодировки в base64 или в hex у меня что-то не получается отправить в теле json
3. Зачем лишний мусор.. речь идёт о передачи именно бинарных данных.
17 июл 19, 09:47    [21928275]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно передать в mssql бинарный файл в JSON  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
разобрался, вопрос закрыт
17 июл 19, 12:22    [21928459]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно передать в mssql бинарный файл в JSON  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Модератор: Вообще для дельфей есть отдельный форум: https://www.sql.ru/forum/delphi
17 июл 19, 12:45    [21928473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить