Отправка файла методом POST с указание параметра body

1. user1358728 27.06.23 15:36 Сейчас в теме
Здравствуйте, спецы!
Прошу помощи, подскажите, пожалуйста, как в 1С сформировать запрос такого вида:

curl -u user:password \
-X POST \
-F "body=D:\Отправляемый файл.docx" \
https://nekiy_server.ru/api/v1/service/attachments/

Не понимаю как реализовать в 1С -F "body=D:\Отправляемый файл.docx"

ЗапросPOSTФайл = Новый HTTPЗапрос();
ЗапросPOSTФайл.АдресРесурса = "nekiy_server.ru";

//как-то в запрос засунуть тело: -F "body=D:\Отправляемый файл.docx"

HTTPСоединение = Новый HTTPСоединение("nekiy_server.ru",, user, password,,, Новый ЗащищенноеСоединениеOpenSSL());
Результат = HTTPСоединение.ОтправитьДляОбработки(ЗапросPOSTФайл);
По теме из базы знаний
Найденные решения
5. user1358728 28.06.23 13:26 Сейчас в теме
(4) Благодарю за помощь, но мне не помогло. Решилась проблема таким образом: импортировал curl-запрос в Postman и посмотрел code snippet для http:

POST /api/v1/attachments/ HTTP/1.1
Host: nekiy_server.ru
Authorization: Basic
*****************тут логин и пароль******************
Content-Length: 264
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="body"; filename="/D:/Temp/Отправляемый файл.docx"
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--


Т.к. в curl-е "-F "body=D:\Отправляемый файл.docx"" соответствует "Content-Type: multipart/form-data",
то реализация вида (ниже) сработала:


	Тело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");
		
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + "body" + "; filename=""" + ФайлОтправки.ИмяФайла + """");
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/msword");
		
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(ДвДанные);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	ЗаписьДанных.Закрыть();
		
	ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
		
	ЗапросPOSTФайл.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
	ЗапросPOSTФайл.Заголовки.Вставить("Content-Length", XMLСтрока(ДанныеТела.Размер()));
	ЗапросPOSTФайл.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + разделитель);
	Результат = HTTPСоединение.ОтправитьДляОбработки(ЗапросPOSTФайл);
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Romeo_1c_programmer 33 27.06.23 15:50 Сейчас в теме
Нужно получить двоичные данные файла и обернуть их в тело
ДанныеФайла= Новый ДвоичныеДанные(Файл.ПолноеИмя);
СтруктураФайла.Вставить("body", Base64Строка(ДанныеФайла));
3. user1358728 27.06.23 15:58 Сейчас в теме
(2)
Что делать со структурой файла СтруктураФайла? И можно обойтись без кодирования в Base64Строка?
4. Romeo_1c_programmer 33 27.06.23 16:10 Сейчас в теме
(3) СтруктураФайла - атрибуты для json.
{
"name": "NamtOfFile",
"body": "-------------------"
}
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураФайла;
СтрокаJSON = ЗаписьJSON.Закрыть();
.....
HTTPЗапрос = Новый HTTPЗапрос(Адрес);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
..........
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Показать
5. user1358728 28.06.23 13:26 Сейчас в теме
(4) Благодарю за помощь, но мне не помогло. Решилась проблема таким образом: импортировал curl-запрос в Postman и посмотрел code snippet для http:

POST /api/v1/attachments/ HTTP/1.1
Host: nekiy_server.ru
Authorization: Basic
*****************тут логин и пароль******************
Content-Length: 264
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="body"; filename="/D:/Temp/Отправляемый файл.docx"
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--


Т.к. в curl-е "-F "body=D:\Отправляемый файл.docx"" соответствует "Content-Type: multipart/form-data",
то реализация вида (ниже) сработала:


	Тело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");
		
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + "body" + "; filename=""" + ФайлОтправки.ИмяФайла + """");
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/msword");
		
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(ДвДанные);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	ЗаписьДанных.Закрыть();
		
	ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
		
	ЗапросPOSTФайл.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
	ЗапросPOSTФайл.Заголовки.Вставить("Content-Length", XMLСтрока(ДанныеТела.Размер()));
	ЗапросPOSTФайл.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + разделитель);
	Результат = HTTPСоединение.ОтправитьДляОбработки(ЗапросPOSTФайл);
Показать
6. MyPuK_OLD 16.12.24 10:37 Сейчас в теме
(5) а что у вас в этой строке записывается?
ЗаписьДанных.Записать(ДвДанные);
"ДвДанные", что туда надо передать?
Оставьте свое сообщение

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