По теме из базы знаний
- Внешняя компонента для сжатия/распаковки файлов, двоичных данных и строк по алгоритму Zlib, Deflate и GZip
- Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник().
- Перенос документа Передача сырья в переработку в документ Поступление в переработку из базы-источника в базу-приемник. БП 3.0
- Демонстрационный пример онлайн мобильного приложения (для отправки файлов с мобильного устройства)
- Чтение из файла или выгрузка в файл: TXT, CSV, XLSX, DBF, XML, JSON с использованием Двоичных данных, Хранилища и Оповещением пользователю
Найденные решения
Функция ПолучитьТекстBase64(Объект = Неопределено,Строка64 = "")
Двоичное = Новый ДвоичныеДанные(Объект);//Ссылка на объект
Строка64 = Base64Строка(Двоичное);//Строка для сохранения
Возврат Строка64
КонецФункции
Процедура ЗаписатьВJSON(Объект)
ИмяФайла = ПолучитьИмяВременногоФайла("json")
тЗапись = Новый ЗаписьJSON;
тЗапись.ОткрытьФайл(ИмяФайла);
тДанные = Новый Структура;
тДанные.Вставить("СтрокаJSON", ПолучитьТекстBase64(Объект));
тНастройкиСериализации = Новый НастройкиСериализацииJSON;
ЗаписатьJSON(тЗапись, тДанные, тНастройкиСериализации);
тЗапись.Закрыть();
КонецПроцедуры
Показать
(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");
ДвоичныеДанныеОтвета.Записать(ИмяВременногоФайла);
//УдалитьФайлы(ИмяВременногоФайла);
Исключение
Ответ.УстановитьТелоИзСтроки("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Возврат Ответ;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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");
ДвоичныеДанныеОтвета.Записать(ИмяВременногоФайла);
//УдалитьФайлы(ИмяВременногоФайла);
Исключение
Ответ.УстановитьТелоИзСтроки("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Возврат Ответ;
Показать
Функция ПолучитьТекстBase64(Объект = Неопределено,Строка64 = "")
Двоичное = Новый ДвоичныеДанные(Объект);//Ссылка на объект
Строка64 = Base64Строка(Двоичное);//Строка для сохранения
Возврат Строка64
КонецФункции
Процедура ЗаписатьВJSON(Объект)
ИмяФайла = ПолучитьИмяВременногоФайла("json")
тЗапись = Новый ЗаписьJSON;
тЗапись.ОткрытьФайл(ИмяФайла);
тДанные = Новый Структура;
тДанные.Вставить("СтрокаJSON", ПолучитьТекстBase64(Объект));
тНастройкиСериализации = Новый НастройкиСериализацииJSON;
ЗаписатьJSON(тЗапись, тДанные, тНастройкиСериализации);
тЗапись.Закрыть();
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот