Выгрузка файла из 1с на веб сервер
Posted On 2019-04-24
Выгрузка файла из 1с на веб сервер, работает и на мобильной платформе
У нас должен быть установленный веб сервер с PHP
В каталог веб сервера передаётся файл send.txt. В параметре filename= задаётся имя файла и расширение файла, который выгрузится на веб сервер
Код 1с
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); _ПутьКФайлуЗапроса = "c:\Apache24\htdocs\send.txt"; Файл = Новый ЧтениеТекста(_ПутьКФайлуЗапроса, КодировкаТекста.ANSI); // Файл = Новый ТекстовыйДокумент; СодержимоеФайла = Файл.Прочитать(); // СодержимоеФайла = Файл.ПолучитьТекст(); ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt"; КодироватьФайл = Истина; ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, Ложь); //Определяем раздел двоичных данных ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Указываем имя файла для передачи //На сервере оно появится в массиве $_FILES['datafile']['name'] ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""userfile""; filename=""" + _ПутьКФайлуЗапроса + """"); //Указываем тип передаваемых данных. //С таким же успехом в Content-Type можно указать application/x-octet-stream ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС); //Записываем кодированные двоичные данные ФайлОтправки.ЗаписатьСтроку(СодержимоеФайла); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы. //Соответствует полю HTML-формы input type="submit" name="submit" value="Submit" / ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("1"); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Соответствует полю HTML-формы input type="checkbox" name="decode" value="decode" / ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""decode""" + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(?(КодироватьФайл, "1", "0")); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Соответствует полю HTML-формы input type="text" name="some_field" value="Some text" / ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""message""" + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("Передача файла из базы данных 1С Предприятия"); //Завершение сообщения для сервера ФайлОтправки.ЗаписатьСтроку("--" + Boundary + "--"); ФайлОтправки.Закрыть(); ЗаголовокHTTP = Новый Соответствие(); //Обязательные поля заголовка //Укажем формат данных Content-Type ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); //Укажем длину POST-запроса Content-Length ФайлОтправки = Новый Файл(ИмяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки); //При необходимости зададим Referer, например таким образом //СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); //СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref"); //ЗаголовокHTTP.Вставить("Referer", СерверИсточник); НТТР = Новый HTTPСоединение("127.0.0.1" , 80); ПутьКФайлуОтвета = "c:\Apache24\htdocs\report.html"; Попытка HTTPОтвет = НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, "2upload.php", ПутьКФайлуОтвета, ЗаголовокHTTP); //ТД = Новый ТекстовыйДокумент; //ТД.Прочитать(_ПутьКФайлуОтвета); //ТД.УдалитьСтроку(1); //ТД.Записать(_ПутьКФайлуОтвета, КодировкаТекста.UTF8); Исключение Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки()); КонецПопытки;
В директории веб сервера должен лежать обработчик. В нашем случае это файл 2upload.php
Файл загружается в директорию uploads в корневом каталоге веб сервера
<?php // Каталог, в который мы будем принимать файл: $uploaddir = './uploads/'; $uploadfile = $uploaddir.basename($_FILES['userfile']['name']); // Копируем файл из каталога для временного хранения файлов: if (copy($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "<h3>Файл успешно загружен на сервер</h3>"; } else { echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>"; exit; } // Выводим информацию о загруженном файле: echo "<h3>Информация о загруженном на сервер файле: </h3>"; echo "<p><b>Оригинальное имя загруженного файла: ".$_FILES['userfile']['name']."</b></p>"; echo "<p><b>Mime-тип загруженного файла: ".$_FILES['userfile']['type']."</b></p>"; echo "<p><b>Размер загруженного файла в байтах: ".$_FILES['userfile']['size']."</b></p>"; echo "<p><b>Временное имя файла: ".$_FILES['userfile']['tmp_name']."</b></p>"; ?>
Ещё варианты обработчика
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST'){ $uploaddir = "./uploads/"; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "<P>Файл корректен и был успешно загружен.\n"; } else { echo "<P>Возможная атака с помощью файловой загрузки!\n"; }; }; ?>
<?php //if($_FILES['userfile']['tmp_name'] != "") //{ $uploaddir = "./uploads/"; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); copy($_FILES['userfile']['tmp_name'], $uploadfile); //var_dump($_FILES); //} ?>