Как транслировать содержимое файла в base64Binary в php
Всем привет.
Задача в следующем: есть файл на диске, этот файл требуется передать в двоичном формате как параметр по WSDL (опубликованному веб сервису 1С) в коде php.
<?php
$двоичныйфайл
$client = new SoapClient("some.wsdl");
$return = $client->GetFile($двоичныйфайл);
?>
Подскажите, пожалуйста, как это можно сделать?
Есть функция base64_encode, но в параметре у неё строка, а не файл.
Есть также функция file_get_contents получает содержимое файла в строку, но параметре у неё url, а не путь к файлу.
Заранее Спасибо!
Задача в следующем: есть файл на диске, этот файл требуется передать в двоичном формате как параметр по WSDL (опубликованному веб сервису 1С) в коде php.
<?php
$двоичныйфайл
$client = new SoapClient("some.wsdl");
$return = $client->GetFile($двоичныйфайл);
?>
Подскажите, пожалуйста, как это можно сделать?
Есть функция base64_encode, но в параметре у неё строка, а не файл.
Есть также функция file_get_contents получает содержимое файла в строку, но параметре у неё url, а не путь к файлу.
Заранее Спасибо!
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Fragster, да, спасибо, я разобрался с данным моментом. Вот php код, он работает, но с одним отклонением.
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
function foo()
{
$result = '';
try {
$clientS = new SoapClient('http://127.0.0.1/1cFresh.local/ws/FilesTransfer?wsdl',
array('login' => 'RemoteAccess',
'password' => '1'));
try {
$TransferId = '650e8400-e29b-41d4-a716-446655440000';
$content = file_get_contents("C:\PHG\BP_3_example.xml");
$PartData = base64_encode($content);
$result.=$clientS->PutFilePart(array('TransferId'=>$TransferId,
'PartNumber'=>$PartNumber, 'PartData'=>$PartData))->return;
}
catch (Exception $e) {
$result.='Exception'.$e->getMessage().'\n';
};
}
catch (Exception $e1) {
$result.='Exception'.$e1->getMessage().'\n';
};
echo $result;
};
foo();
return;
?>
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
function foo()
{
$result = '';
try {
$clientS = new SoapClient('http://127.0.0.1/1cFresh.local/ws/FilesTransfer?wsdl',
array('login' => 'RemoteAccess',
'password' => '1'));
try {
$TransferId = '650e8400-e29b-41d4-a716-446655440000';
$content = file_get_contents("C:\PHG\BP_3_example.xml");
$PartData = base64_encode($content);
$result.=$clientS->PutFilePart(array('TransferId'=>$TransferId,
'PartNumber'=>$PartNumber, 'PartData'=>$PartData))->return;
}
catch (Exception $e) {
$result.='Exception'.$e->getMessage().'\n';
};
}
catch (Exception $e1) {
$result.='Exception'.$e1->getMessage().'\n';
};
echo $result;
};
foo();
return;
?>
Одно маленькое отклонение :), но из-за него ахтунг.
FilesTransfer.PutFilePart - это соответственно в 1С вебсервис.операция.
код в операции веб сервиса 1С простой: PartData.Записать("путь файла");
Вроде, все замечательно: веб сервис производит запись переданных в него через параметр PartData данных в формате base64Binary в файл "путь файла".
НО формат там не xml, а 455 алпал ш498е9е4 ...
FilesTransfer.PutFilePart - это соответственно в 1С вебсервис.операция.
код в операции веб сервиса 1С простой: PartData.Записать("путь файла");
Вроде, все замечательно: веб сервис производит запись переданных в него через параметр PartData данных в формате base64Binary в файл "путь файла".
НО формат там не xml, а 455 алпал ш498е9е4 ...
Спасибо, starik-2005.
Если методами 1С производить аналогичные манипуляции с веб сервисом:
FileД1 = Новый ДвоичныеДанные("путь файла");
Определения = Новый WSОпределения("http://127.0.0.1/1cFresh.local/ws/FilesTransfer?wsdl","RemoteAccess",1);
Прокси = Новый WSПрокси(Определения,"http://www.1c.ru/SaaS/1.0/WS","FilesTransfer","FilesTransferSoap");
Прокси.Пользователь = "RemoteAccess";
Прокси.Пароль = 1;
Рез = Прокси.PutFilePart("650e8400-e29b-41d4-a716-446655440009",неопределено,FileД1);
То содержимое сохраненного файла будет уже не а 455 алпал ш498е9е4 ..., а формат xml.
Подскажите, пожалуйста,starik-2005 как раскодировать такой файл методами 1С, который был создан средствами php и 1С?
Если методами 1С производить аналогичные манипуляции с веб сервисом:
FileД1 = Новый ДвоичныеДанные("путь файла");
Определения = Новый WSОпределения("http://127.0.0.1/1cFresh.local/ws/FilesTransfer?wsdl","RemoteAccess",1);
Прокси = Новый WSПрокси(Определения,"http://www.1c.ru/SaaS/1.0/WS","FilesTransfer","FilesTransferSoap");
Прокси.Пользователь = "RemoteAccess";
Прокси.Пароль = 1;
Рез = Прокси.PutFilePart("650e8400-e29b-41d4-a716-446655440009",неопределено,FileД1);
То содержимое сохраненного файла будет уже не а 455 алпал ш498е9е4 ..., а формат xml.
Подскажите, пожалуйста,starik-2005 как раскодировать такой файл методами 1С, который был создан средствами php и 1С?
(6) Алексей777, да все просто:
[quote]
Base64Значение (Base64Value)
Синтаксис:
Base64Значение(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Строка, закодированная по алгоритму base64.
Возвращаемое значение:
Тип: ДвоичныеДанные.
Описание:
Получает из строки закодированной по алгоритму base64 двоичные данные.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). [/quote]
Для Вас двоичными данными будет XML.
[quote]
Base64Значение (Base64Value)
Синтаксис:
Base64Значение(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Строка, закодированная по алгоритму base64.
Возвращаемое значение:
Тип: ДвоичныеДанные.
Описание:
Получает из строки закодированной по алгоритму base64 двоичные данные.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). [/quote]
Для Вас двоичными данными будет XML.
Может в php надо использовать другие функции для получения передаваемого файла?
Есть в php функции работы с файлами, типа:
//Открывает файл в разных режимах
$fp = fopen('counter.txt', 'r'); // Бинарный режим
пробовал, не подходит, хотя файл также записывается :).
Есть в php функции работы с файлами, типа:
//Открывает файл в разных режимах
$fp = fopen('counter.txt', 'r'); // Бинарный режим
пробовал, не подходит, хотя файл также записывается :).
starik-2005, у меня ощущение, что правильный ответ кроется вот здесь:
http://forum.infostart.ru/forum86/topic114939/
Но, я пока не понимаю, как извлечь содержимое из файла.
Но, я пока не понимаю, как извлечь содержимое из файла.
Получилось!!!
//в параметре тот самый злополучный :) файл
ТекПутьКФайлу = ("C:\TempFiles\transfer650e8400-e29b-41d4-a716-446655440000");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ТекПутьКФайлу);
ТекстСтрока = ТекстовыйДокумент.ПолучитьТекст();
ДвоичнДанные = Base64Значение(ТекстСтрока);
ДвоичнДанные.Записать("C:\TempFiles\transferAllRight.xml");
И вуаля, в файле transferAllRight.xml уже не абра казябра, а нормальный формат XML!
Спасибо, Вам, starik-2005 и Fragster!
//в параметре тот самый злополучный :) файл
ТекПутьКФайлу = ("C:\TempFiles\transfer650e8400-e29b-41d4-a716-446655440000");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ТекПутьКФайлу);
ТекстСтрока = ТекстовыйДокумент.ПолучитьТекст();
ДвоичнДанные = Base64Значение(ТекстСтрока);
ДвоичнДанные.Записать("C:\TempFiles\transferAllRight.xml");
И вуаля, в файле transferAllRight.xml уже не абра казябра, а нормальный формат XML!
Спасибо, Вам, starik-2005 и Fragster!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот