Добрый день.
Подскажите, пожалуйста (если можно с примером), как мне поместить в JSON файл(ы), например сканы договора? Спасибо. Платформа 8.3 УХ 3.1.
---
```1c
    Функция ПолучитьТекстBase64(Объект = Неопределено,Строка64 = ")
    Двоичное = Новый ДвоичныеДанные(Объект);//Ссылка на объект
    Строка64 = Base64Строка(Двоичное);//Строка для сохранения
    Возврат Строка64
    КонецФункции

    Процедура ЗаписатьВJSON(Объект)
    ИмяФайла = ПолучитьИмяВременногоФайла("json")
    тЗапись = Новый ЗаписьJSON;
    тЗапись.ОткрытьФайл(ИмяФайла);

    тДанные = Новый Структура;

    тДанные.Вставить("СтрокаJSON", ПолучитьТекстBase64(Объект));
    тНастройкиСериализации = Новый НастройкиСериализацииJSON;
    ЗаписатьJSON(тЗапись, тДанные, тНастройкиСериализации);
    тЗапись.Закрыть();
    КонецПроцедуры
```
---
Просто двоичные данные могут и не пройти, если jpg 2-3 мб, то в ДД будет все 20. А апач/ИИС могут резать. еще желательно сжать. (фото - файл со сканом)

```1c
    Попытка
    ДД = Фото.ПолучитьДвоичныеДанные()
    Рез_строка = XMLСтрока(Новый ХранилищеЗначения(ДД, Новый СжатиеДанных(9)));

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("PhotoInfo");
    ЗаписьJSON.ЗаписатьЗначение(Рез_строка);
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    СтрокаJSON = ЗаписьJSON.Закрыть();

    //отправим
    НТТР = HTTPмодуль.ПолучитьHTTPСоединение();
    ЗапросHTTP = Новый HTTPЗапрос(HTTPмодуль.ПолучитьПутьЗапроса()+"/photo");
    ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаJSON);
    ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP);

    Если ОтветHTTP.КодСостояния = 200 Тогда
    Сообщить("Фото отправлено");
    Иначе
    Сообщить("+ОтветHTTP);
    КонецЕсли;

    Исключение
    Сообщить("+ ОписаниеОшибки());
    КонецПопытки;
```

На стороне сервера:

```1c
    Ответ = Новый HTTPСервисОтвет(200);

    Попытка
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
    СтруктураЗапроса = ПрочитатьJSON(ЧтениеJSON, Ложь);

    PhotoInfo = СтруктураЗапроса.PhotoInfo;
    ХЗ = XMLЗначение(Тип("ХранилищеЗначения"), PhotoInfo);
    ДвоичныеДанныеОтвета = ХЗ.Получить();

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("jpg");

    ДвоичныеДанныеОтвета.Записать(ИмяВременногоФайла);

    //УдалитьФайлы(ИмяВременногоФайла);

    Исключение
    Ответ.УстановитьТелоИзСтроки("Ошибка: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат Ответ;
```
---
пожалуйста (если можно с примером), как мне поместить в JSON файл(ы),

Сериализация:
файл -> ДвоичныеДанные
Строка = Base64Строка(<ДвоичныеДанные>)
Строку записываете в Json

Парсить в обратном направлении)
---
пожалуйста (если можно с примером), как мне поместить в JSON файл(ы),

Сериализация:
файл -> ДвоичныеДанные
Строка = Base64Строка(<ДвоичныеДанные>)
Строку записываете в Json

Парсить в обратном направлении)
---
Просто двоичные данные могут и не пройти, если jpg 2-3 мб, то в ДД будет все 20. А апач/ИИС могут резать. еще желательно сжать. (фото - файл со сканом)

```1c
    Попытка
    ДД = Фото.ПолучитьДвоичныеДанные()
    Рез_строка = XMLСтрока(Новый ХранилищеЗначения(ДД, Новый СжатиеДанных(9)));

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("PhotoInfo");
    ЗаписьJSON.ЗаписатьЗначение(Рез_строка);
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    СтрокаJSON = ЗаписьJSON.Закрыть();

    //отправим
    НТТР = HTTPмодуль.ПолучитьHTTPСоединение();
    ЗапросHTTP = Новый HTTPЗапрос(HTTPмодуль.ПолучитьПутьЗапроса()+"/photo");
    ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаJSON);
    ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP);

    Если ОтветHTTP.КодСостояния = 200 Тогда
    Сообщить("Фото отправлено");
    Иначе
    Сообщить("+ОтветHTTP);
    КонецЕсли;

    Исключение
    Сообщить("+ ОписаниеОшибки());
    КонецПопытки;
```

На стороне сервера:

```1c
    Ответ = Новый HTTPСервисОтвет(200);

    Попытка
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
    СтруктураЗапроса = ПрочитатьJSON(ЧтениеJSON, Ложь);

    PhotoInfo = СтруктураЗапроса.PhotoInfo;
    ХЗ = XMLЗначение(Тип("ХранилищеЗначения"), PhotoInfo);
    ДвоичныеДанныеОтвета = ХЗ.Получить();

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("jpg");

    ДвоичныеДанныеОтвета.Записать(ИмяВременногоФайла);

    //УдалитьФайлы(ИмяВременногоФайла);

    Исключение
    Ответ.УстановитьТелоИзСтроки("Ошибка: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат Ответ;
```
---
Например, закодировав их двоичные данные в base64
---
```1c
    Функция ПолучитьТекстBase64(Объект = Неопределено,Строка64 = ")
    Двоичное = Новый ДвоичныеДанные(Объект);//Ссылка на объект
    Строка64 = Base64Строка(Двоичное);//Строка для сохранения
    Возврат Строка64
    КонецФункции

    Процедура ЗаписатьВJSON(Объект)
    ИмяФайла = ПолучитьИмяВременногоФайла("json")
    тЗапись = Новый ЗаписьJSON;
    тЗапись.ОткрытьФайл(ИмяФайла);

    тДанные = Новый Структура;

    тДанные.Вставить("СтрокаJSON", ПолучитьТекстBase64(Объект));
    тНастройкиСериализации = Новый НастройкиСериализацииJSON;
    ЗаписатьJSON(тЗапись, тДанные, тНастройкиСериализации);
    тЗапись.Закрыть();
    КонецПроцедуры
```
---
А откуда вообще взялась идея, что в json нужно двоичные данные пихать?
---
Ну да, лучше ссылки на какое-нибудь облако или авторизуемый закрытый веб ресурс.
Технически как бы возможно ДД вкладывать, но архитектурно - страх и ужас.
Или как в Операции Ы экзамен. За изобретение 5, а за экзамен 2, неуд.
---
Всем спасибо.
Нужно загрузить данные из/в внешней программы, разработчики которой могут (делают вид, что могут) выгружать/загружать их
1) только в json
2) файлы так же только через json