Выгрузка файла из 1с на веб сервер

Выгрузка файла из 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);
//}
?>