Skip to main content

Портяночка, отправка файла из 1С через POST

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

// Задаем путь к файлу, который будет отправлен
ИмяФайлаОтправки = "\\10.0.0.108\tmp\price.xls";

// Создаем объект для двоичных данных на основе файла
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаОтправки);

// Создаем соединение с сервером
Соединение = Новый HTTPСоединение("dev.vlytkin.ru", 443,,,,,Новый ЗащищенноеСоединениеOpenSSL());

// Создаем HTTP запрос
HTTPЗапрос = Новый HTTPЗапрос("/opt/upload.php");

// Параметры для отправки файла
ИмяПараметра = "file";
ИмяФайла = "tmp.xls"; 

// Генерируем уникальный разделитель для multipart/form-data
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", ""); 

// Создаем поток для формирования тела запроса
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");     

// Начинаем формировать тело запроса
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + ИмяПараметра + "; filename=" + ИмяФайла);
ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/vnd.ms-excel");
ЗаписьДанных.ЗаписатьСтроку(""); // Пустая строка для дополнительного переноса

// Записываем двоичные данные файла
ЗаписьДанных.Записать(ДвоичныеДанные); 
ЗаписьДанных.ЗаписатьСтроку(""); // Пустая строка для переноса

// Завершаем тело запроса
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); 
ЗаписьДанных.Закрыть();

// Получаем тело запроса в виде двоичных данных
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные(); 

// Устанавливаем тело запроса
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела); 

// Устанавливаем заголовки запроса
HTTPЗапрос.Заголовки.Вставить("Content-Length", XMLСтрока(ДанныеТела.Размер()));
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);  

// Отправляем запрос и получаем ответ
ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);