Загрузка файлов на сервер с использованием HTTP-сервиса 1С (multipart/form-data).

Публикация № 1277790

Разработка - Практика программирования

загрузка http post multpart/form-data

Вариант загрузки файлов в составных данных методом POST (multipart/form-data) на примере демонстрационной базы.

Предположим, что есть сайт (HTML-страница) с формой, в которой пользователь должен заполнить некие поля, прикрепить файл и отправить все эти данные на сервер, чтобы сохранить их в базе 1С, где-то на диске или просто обработать по какому-либо алгоритму. Например, прикрепить скан паспорта в личном кабинете или скриншот при описании своей проблемы с программой и т.п.

Для отправки HTML-форм с двоичными данными методом POST используется составной тип содержимого multipart/form-data.

Получение таких данных HTTP-сервисом 1С реализовано на примере демонстрационной базы. В базе присутствует справочник Пользователи, содержащий имя пользователя, адрес его электронной почты и фотографию. А так же HTTP-сервис для регистрации новых пользователей.

Реализована простейшая HTML-страница регистрации пользователя на сайте.

 
 Код HTML-страницы

После нажатия на кнопку Выполнить регистрацию в демонстрационной базе создаётся новый элемент справочника Пользователи, содержащий указанные данные.

Тело передаваемого POST запроса будет выглядеть следующим образом.

POST /form.html HTTP/1.1
Host: server.com
Referer: http://server.com/form.html
User-Agent: Mozilla
Content-Type: multipart/form-data; boundary=-------------573cf973d5228
Content-Length: 288
Connection: keep-alive
Keep-Alive: 300
(пустая строка)
(отсутствующая преамбула)
---------------573cf973d5228
Content-Disposition: form-data; name="email"

phill@bestcompany.com
---------------573cf973d5228 
Content-Disposition: form-data; name="name" 

Филиппов Артем Леонидович
---------------573cf973d5228
Content-Disposition: form-data; name="photo"; filename="photo.png"
Content-Type: image/png

<Двоичные данные изображения>
---------------573cf973d5228--

Подробно этот метод описан в RFC7578.

Функции по обработке HTTP-запроса с составным содержимым реализованы в общем модуле ОбработкаЗапросовHTTPСервиса. Его можно использовать "как есть" в своих конфигурациях.

Процедура обработчика HTTP-сервиса по регистрации нового пользователя может выглядеть подобным образом.

Функция ЗарегистрироватьНовогоПользователя(Запрос)
	
	ПоляЗапроса = ОбработкаЗапросовHTTPСервиса.ПрочитатьСоставноеСодержимоеЗапроса(Запрос);
	
	// Для простоты демонстрации не выполняется проверка корректности заполнения полей запроса.
	
	ДанныеПользователя = Новый Структура;
	ДанныеПользователя.Вставить("АдресЭлектроннойПочты", ПоляЗапроса["email"].Содержимое);
	ДанныеПользователя.Вставить("ИмяПользователя", ПоляЗапроса["user_name"].Содержимое);
	ДанныеПользователя.Вставить("Фотография", ПоляЗапроса["photo"].Содержимое);
	
	Пользователи.ЗарегистрироватьПользователя(ДанныеПользователя);
	
	Ответ = Новый HTTPСервисОтвет(200);
	Возврат Ответ;
	
КонецФункции
 
 Код процедуры "ЗарегистрироватьПользователя" общего модуля "Пользователи"

Функция ПрочитатьСоставноеСодержимоеЗапроса разбирает полученный запрос и возвращает Соответствие, содержащее переданные поля с их содержимым.

 
 Описание функции "ПрочитатьСоставноеСодержимоеЗапроса"

 Синтаксис:

ПрочитатьСоставноеСодержимоеЗапроса(<Запрос>)

Параметры:

<Запрос> (обязательный)
Тип: HTTPСервисЗапрос
Запрос, полученный HTTP-сервисом.

Возвращаемое значение:

Тип: Соответствие
Соответствие, содержащее описание полей составного содержимого. В качестве ключа используется имя поля. Значение содержит структуру с описанием поля:

  • Имя - Строка - имя поля (свойство name заголовка Content-Disposition).
  • ИмяФайла - Строка - имя файла (свойство filename заголовка Content-Disposition). Если имя файла указано, то содержимое является двоичными данными.
  • ТипСодержимого - Строка - тип содержимого, указанный в заголовке Content-Type поля. Например: text/plain, image/jpeg и т.п. Может отсутствовать.
  • Содержимое - Строка, ДвоичныеДанные - содержимое поля. Если указано имя файла, то содержит двоичные данные, иначе Строка.

Описание:

Читает тело запроса HTTP-сервиса, имеющее составное содержимое (multipart/form-data) и возвращает поля этого содержимого в виде соответствия. В качестве ключа используется имя поля.

В архиве к публикации содержится cf-файл демонстрационной конфигурации и html-страница регистрации пользователя. Также, ниже приведён полный текст общего модуля ОбработкаЗапросовHTTPСервиса, который можно вставить в свою конфигурацию.

 
 Полный текст общего модуля "ОбработкаЗапросовHTTPСервиса"

Исходный код распространяется под лицензий Apache 2.0. Вы можете свободно использовать, изменять и распространять его, в том числе и в коммерческих целях с обязательным указанием авторства. Подробнее см. текст лицензии http://www.apache.org/licenses/LICENSE-2.0

Скачать файлы

Наименование Файл Версия Размер
Демонстрационная база загрузки файлов с использованием HTTP-сервиса

.zip 21,79Kb
11.08.20
11
.zip 21,79Kb 11 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. YPermitin 9997 12.08.20 12:10 Сейчас в теме
3. ltfriend 597 12.08.20 20:47 Сейчас в теме
2. malikov_pro 613 12.08.20 12:52 Сейчас в теме
В чем новизна относительно https://infostart.ru/public/20017/?
Если реализовано в виде расширения которое можно относительно просто переиспользовать, то хорошо. В качестве основы можно использовать демо БСП.
4. SizovE 28 17.08.20 12:05 Сейчас в теме
Я так понимаю, там была отправка, а тут загрука. 1С не умеет работать с formdata.
Полезная штука.
Оставьте свое сообщение

См. также

BIM: взаимодействие с платформой Autodesk Forge Промо

WEB v8 Строительство Абонемент ($m)

Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.

1 стартмани

25.11.2020    913    0    kandr    0    

Конвертация PDF в 1С

Практика программирования Разработка внешних компонент Абонемент ($m)

COM-компонента для работы с PDF (32/64 bit)

4 стартмани

31.03.2020    7458    14    SerVer1C    33    

"Учет штрафов ГИБДД" с возможной загрузкой из открытых источников в интернет Расширение конфигурации 1С: Предприятие 8.3 Промо

Обработка документов WEB v8 v8::УФ 1cv8.cf Россия БУ УУ Абонемент ($m)

Расширение конфигурации Бухгалтерия предприятия, редакция 3.0 (при минимальных изменениях любой типовой конфигурации), позволяющее вести историю данных по штрафам ГИБДД для справочника транспортных средств компании. Бонусом поставляется внешняя обработка, способная загружать эти данные из открытых источников в интернет.

4 стартмани

30.12.2019    8089    9    capitan    9    

Remotrix - простая консоль SQL-запросов к удаленной базе Bitrix через админку

WEB Абонемент ($m)

Время от времени требуется выполнять прямые запросы к базе сайта на Bitrix. Делать это через web-интерфейс в админке - не слишком удобно, так родился Remotrix.

1 стартмани

15.11.2019    3159    2    MadDAD    0    

Замена MS Project в интегрированных системах

WEB Работа с интерфейсом 1cv8.cf Абонемент ($m)

Сразу надо сказать, что речь идет о замене только наиболее сложной части - расчете расписания с выравниванием загрузки ресурсов. Рисовать и редактировать диаграмму Ганта, учитывать факт, сравнивать планы и разрабатывать отчеты придется самим. Хотя для разработчиков корпоративных систем все это не выглядит чересчур сложным.

1 стартмани

31.10.2019    5813    12    PeterAlmazov    0    

Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 2. Категории постов/страниц WordPress.

WEB 1cv8.cf Абонемент ($m)

Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 2. Категории постов/страниц WordPress. Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью функционала Rest API предоставляемого платформой (CMS) WordPress (WooCommerce). Без дополнительных приложений на PHP/вставьте сюда любой другой язык программирования/.

1 стартмани

21.10.2019    5581    4    osivv    15    

Распаковка хранилища значений средствами MS SQL Server

Практика программирования Абонемент ($m)

Способ извлечения данных из 1С-ного "ХранилищеЗначений" в MS SQL Server с помощью самописной скалярной функции (без использования платформы 1С).

1 стартмани

23.09.2019    7205    1    SerVer1C    11    

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

1 стартмани

30.03.2018    27271    40    Ditron    83    

Расширяем возможности MS SQL Server с помощью хранимых процедур CLR

Практика программирования Разработка Абонемент ($m)

Не хватает какого-то функционала на скуле для обработки данных? Тогда он (новый функционал) идет к вам.

1 стартмани

02.09.2019    8563    0    SerVer1C    9    

Работа с релизами 1С и договорами ИТС

WEB БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Работа с релизами 1С и партнерским кабинетом.

2 стартмани

15.08.2019    14799    44    RocKeR_13    15    

Получение данных из Web-сервиса 1С в php, с авторизацией логином и паролем на кириллице

WEB Абонемент ($m)

В рамках задачи получения данных из 1С средствами web-сервиса, часто возникает потребность авторизации на web-сервисе под учетными данными уже существующих пользователей. Но так как "логины" и "пароли" уже занесены в кириллической раскладке, возникает ошибка авторизации, в то время как логины в латинской раскладке работают корректно. Это возникает из-за того что кодировка текста (логина и пароля) отличается от той что понимает web-сервис 1С (UTF-8).

1 стартмани

01.08.2019    4894    1    miha889    0    

Вам нравятся запросы в 1С?

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    21179    5    m-rv    88    

Перфолента, первое знакомство. Новый язык программирования

Практика программирования Инструментарий разработчика Абонемент ($m)

Первое знакомство с новым языком программирования Перфолента. В статье описано назначение языка, причины его появления, основные характеристики и возможные варианты использования.

22.07.2019    20746    21    Perfolenta    165    

Настраиваемое мобильное приложение для сканирования штрихкодов

Практика программирования Сканер штрих-кода Мобильная разработка Абонемент ($m)

Обзор приложения для сканирования штрихкодов с возможностью обработки результата сканирования произвольным кодом для совместного использования с Android приложениями через Intent и взаимодействие с 1С конфигурациями через web-сервис.

1 стартмани

14.01.2019    9183    5    inord777    9    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    30878    86    m-rv    57    

Проверка VAT номеров

WEB v8 1cv8.cf Абонемент ($m)

Обработка для вызова сервиса проверка VAT номера.

1 стартмани

26.11.2018    12986    2    wtlz    1    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    22121    13    RocKeR_13    16    

Создаем объекты для модуля Bootstarp на Русском Фоксе

Практика программирования Россия Абонемент ($m)

Создавайте свой модуль с объектами для модуля Bootstrap, пакуйте их fxp-файлы и создавайте сайты из этих кубиков. Разберем, как это делать. Все гениальное должно быть простым, как теория относительности.

1 стартмани

19.08.2018    6674    0    andreosh    3    

РусскийФокс и BootStrap

Практика программирования Россия Абонемент ($m)

РусскийФокс вносит новый технологический подход в сайтостроение. Теперь вы можете ограничиться знанием Русского Фокса и не иметь знаний по HTML, CSS, JavaScript, PHP, чтоб создавать сайты.

1 стартмани

16.08.2018    7037    1    andreosh    18    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    28634    26    informa1555    26    

РусскийФокс. Изменение DBF-файла и назначение командных клавиш

Практика программирования Файловые протоколы обмена, FTP Россия Абонемент ($m)

- Шарапов, ты Русского Фокса знаешь ? - Конечно, Глеб. Я же программирую на Русском Фоксе. РусскийФокс (1C-подобный язык программирования) создает DBF-файлы и выгружает данные из DBF в XML.

1 стартмани

01.08.2018    6585    0    andreosh    2    

Работа с картой. Кадастровый учет (Росреестр). Тематические карты Промо

WEB Рабочее место v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя обработка для работы с картами в 1С. Получения изображения с публичной кадастровой карты России, построения тематических карт

5 стартмани

31.08.2017    18795    15    vipchep    0    

РусскийФокс. Создание DBF-файла, выгрузка в XML.

Практика программирования Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает DBF-файлы и выгружает данные из DBF в XML. Голосуйте за доклад о РусскийФокс на Инфостарт.

1 стартмани

28.07.2018    6451    2    andreosh    0    

РусскийФокс и ClickerMann заносят данные в 1С

Сервисные утилиты Практика программирования Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает сценарии для Clickermann. Сценарий заполняет справочник в 1С.

1 стартмани

21.07.2018    11348    1    andreosh    20    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

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

1 стартмани

17.07.2018    49065    17    kalyaka    16    

РусскийФокс и OpenOffice, а также исследование объектов

Практика программирования Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . Взаимодействие с OpenOffice. GitHub https://github.com/UfaScript/RusFox

1 стартмани

12.07.2018    6867    1    andreosh    2    

РусскийФокс — 1С-подобный язык программирования

Практика программирования Математика и алгоритмы Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Знакомство.

1 стартмани

03.07.2018    10687    1    andreosh    50    

Пример использования REST API Яндекс Диска

WEB v8 1cv8.cf Абонемент ($m)

Пример использования REST API Яндекс Диска: чтение диска, добавление каталога, загрузка файла, скачивание файлов или каталогов, удаление файлов или каталогов.

1 стартмани

26.06.2018    26019    42    MKFreeUser    15    

Работа с картами 1С 4 в 1: Яндекс, Google , 2ГИС, OpenStreetMap(OpenLayers) Промо

Универсальные обработки WEB v8 1cv8.cf Абонемент ($m)

С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов: Инициализация карты Поиск адреса на карте с текстовым представлением Геокодинг Обратная поиск адреса по ее координатами Взаимодействие с картами - прием координат установленного на карте метки Построение маршрутов по указанным точками Кластеризация меток на карте при увеличении масштаба Теперь также поддержка тонкого и веб-клиента

1 стартмани

28.12.2012    107161    1207    Smaylukk    355    

Обмен файловыми базами данных через Yandex диск

WEB v8 Россия Абонемент ($m)

Выполнение операций обмена с Yandex диском для файловых БД, по протоколу WebDav, в автоматическом или ручном режимах.

1 стартмани

11.06.2018    17543    7    slimper    1    

Конфигурация для просмотра публичных телеграм каналов

WEB v8 Абонемент ($m)

Просмотр и каталогизация в более удобном виде публичных телеграм каналов, групп и чатов.

1 стартмани

02.06.2018    18299    11    DO_WHILE_LOOP    7    

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR

Инструментарий разработчика Практика программирования Россия Абонемент ($m)

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    6987    1    bedvit    4    

Построение маршрута доставки с расчётом расстояния для любой базы УФ

Универсальные обработки WEB Оптовая торговля Оптовая торговля v8 v8::УФ 1cv8.cf Абонемент ($m)

Графическое изображение маршрутного листа по картам гугл. Работает на любой конфигурации с управляемыми формами. Использует новую версию api google-карт от 13.02.2018 года под IE11.

10 стартмани

24.02.2018    36308    43    KorotkovRV    16    

Заполняем по шаблону (по умолчанию)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Простой в подключении, универсальный и достаточно удобный механизм заполнения реквизитов произвольных документов/справочников значениями по умолчанию. Реализован в расширении, но может быть и непосредственно включен практически в любую конфигурацию на управляемых формах простым копированием одной формы и двух команд. Весь код в статье.

1 стартмани

08.02.2018    28706    19    mvxyz    17    

Веб-разработка на 1С (1Script)

Практика программирования Абонемент ($m)

Дорогие коллеги, под новый год хочется сделать небольшой сюрприз. Я уже два года обещаю сделать движок веб-разработки для 1С-ников, и вот, наконец, есть что показать. Этим новогодним постом я открываю сериал "Веб-разработка для 1С-ников". Все, кто знаком с проектом OneScript – добро пожаловать! Остальные, тоже не стесняйтесь!

1 стартмани

28.12.2017    29749    22    Evil Beaver    82    

Сервер push сообщений “Push0k“ 18.05

WEB v8 1cv8.cf Абонемент ($m)

Аналог других “мессенджеров“. Позволяет практически все то же самое, что и другие решения. За исключением смайлов, эмодзи, голосовой и видео связи. Основное отличие от других решений, открыта и доступна для изменения серверная и клиентская часть месенджера. Общедоступной серверной части нет, за серверную часть отвечаете вы сами.

1 стартмани

19.12.2017    18544    12    PloAl    20    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    27417    54    kwazi    6