Передача файла в json

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

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

 тДанные.Вставить("СтрокаJSON",  ПолучитьТекстBase64(Объект));
 тНастройкиСериализации = Новый НастройкиСериализацииJSON;  
 ЗаписатьJSON(тЗапись, тДанные, тНастройкиСериализации);
 тЗапись.Закрыть();
КонецПроцедуры
Показать
NicolasCage; kaaasteeen; +2 Ответить
6. succub1_5 89 19.04.21 14:56 Сейчас в теме
(1)Просто двоичные данные могут и не пройти, если jpg 2-3 мб, то в ДД будет все 20. А апач/ИИС могут резать. еще желательно сжать. (фото - файл со сканом)
Попытка
ДД = Фото.ПолучитьДвоичныеДанные()
		Рез_строка = 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);
		КонецЕсли;
		
	Исключение
		Сообщить(""+ ОписаниеОшибки());
	КонецПопытки;
Показать


На стороне сервера:
Ответ = Новый HTTPСервисОтвет(200);
	
	Попытка
		ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
		СтруктураЗапроса = ПрочитатьJSON(ЧтениеJSON, Ложь);
		
		PhotoInfo = СтруктураЗапроса.PhotoInfo; 
		ХЗ = XMLЗначение(Тип("ХранилищеЗначения"), PhotoInfo);
		ДвоичныеДанныеОтвета = ХЗ.Получить();		
		
		ИмяВременногоФайла = ПолучитьИмяВременногоФайла("jpg");
		
		ДвоичныеДанныеОтвета.Записать(ИмяВременногоФайла); 
		
		//УдалитьФайлы(ИмяВременногоФайла);
		
	Исключение
		Ответ.УстановитьТелоИзСтроки("Ошибка: " + ОписаниеОшибки());
	КонецПопытки;
	
	Возврат Ответ;
Показать
kaaasteeen; +1 Ответить
2. ivan1703 78 19.04.21 13:40 Сейчас в теме
(1)
пожалуйста (если можно с примером), как мне поместить в JSON файл(ы),


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

Парсить в обратном направлении)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ivan1703 78 19.04.21 13:40 Сейчас в теме
(1)
пожалуйста (если можно с примером), как мне поместить в JSON файл(ы),


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

Парсить в обратном направлении)
6. succub1_5 89 19.04.21 14:56 Сейчас в теме
(1)Просто двоичные данные могут и не пройти, если jpg 2-3 мб, то в ДД будет все 20. А апач/ИИС могут резать. еще желательно сжать. (фото - файл со сканом)
Попытка
ДД = Фото.ПолучитьДвоичныеДанные()
		Рез_строка = 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);
		КонецЕсли;
		
	Исключение
		Сообщить(""+ ОписаниеОшибки());
	КонецПопытки;
Показать


На стороне сервера:
Ответ = Новый HTTPСервисОтвет(200);
	
	Попытка
		ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
		СтруктураЗапроса = ПрочитатьJSON(ЧтениеJSON, Ложь);
		
		PhotoInfo = СтруктураЗапроса.PhotoInfo; 
		ХЗ = XMLЗначение(Тип("ХранилищеЗначения"), PhotoInfo);
		ДвоичныеДанныеОтвета = ХЗ.Получить();		
		
		ИмяВременногоФайла = ПолучитьИмяВременногоФайла("jpg");
		
		ДвоичныеДанныеОтвета.Записать(ИмяВременногоФайла); 
		
		//УдалитьФайлы(ИмяВременногоФайла);
		
	Исключение
		Ответ.УстановитьТелоИзСтроки("Ошибка: " + ОписаниеОшибки());
	КонецПопытки;
	
	Возврат Ответ;
Показать
kaaasteeen; +1 Ответить
3. platonov.e 158 19.04.21 13:40 Сейчас в теме
Например, закодировав их двоичные данные в base64
ivan1703; +1 Ответить
4. keyn5565` 18 19.04.21 14:05 Сейчас в теме
Функция ПолучитьТекстBase64(Объект = Неопределено,Строка64 = "")
Двоичное = Новый ДвоичныеДанные(Объект);//Ссылка на объект
Строка64 = Base64Строка(Двоичное);//Строка для сохранения
Возврат Строка64  
КонецФункции

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

 тДанные.Вставить("СтрокаJSON",  ПолучитьТекстBase64(Объект));
 тНастройкиСериализации = Новый НастройкиСериализацииJSON;  
 ЗаписатьJSON(тЗапись, тДанные, тНастройкиСериализации);
 тЗапись.Закрыть();
КонецПроцедуры
Показать
NicolasCage; kaaasteeen; +2 Ответить
5. DenisCh 19.04.21 14:32 Сейчас в теме
А откуда вообще взялась идея, что в json нужно двоичные данные пихать?
7. Leon75 19.04.21 15:02 Сейчас в теме
(5)Ну да, лучше ссылки на какое-нибудь облако или авторизуемый закрытый веб ресурс.
Технически как бы возможно ДД вкладывать, но архитектурно - страх и ужас.
Или как в Операции Ы экзамен. За изобретение 5, а за экзамен 2, неуд.
8. nikson_1987 19.04.21 19:39 Сейчас в теме
Всем спасибо.
Нужно загрузить данные из/в внешней программы, разработчики которой могут (делают вид, что могут) выгружать/загружать их
1) только в json
2) файлы так же только через json
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот