Портяночка, отправка файла из 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Запрос);
No Comments