Как транслировать содержимое файла в base64Binary в php

1. Алексей777 99 06.08.15 17:20 Сейчас в теме
Всем привет.
Задача в следующем: есть файл на диске, этот файл требуется передать в двоичном формате как параметр по WSDL (опубликованному веб сервису 1С) в коде php.

<?php
$двоичныйфайл

$client = new SoapClient("some.wsdl");
$return = $client->GetFile($двоичныйфайл);

?>

Подскажите, пожалуйста, как это можно сделать?

Есть функция base64_encode, но в параметре у неё строка, а не файл.

Есть также функция file_get_contents получает содержимое файла в строку, но параметре у неё url, а не путь к файлу.

Заранее Спасибо!
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Fragster 1140 06.08.15 18:34 Сейчас в теме
(1) Алексей777, у указанной функции параметр - это именно имя файла
3. Алексей777 99 07.08.15 12:06 Сейчас в теме
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;


?>
4. Алексей777 99 07.08.15 12:14 Сейчас в теме
Одно маленькое отклонение :), но из-за него ахтунг.

FilesTransfer.PutFilePart - это соответственно в 1С вебсервис.операция.

код в операции веб сервиса 1С простой: PartData.Записать("путь файла");

Вроде, все замечательно: веб сервис производит запись переданных в него через параметр PartData данных в формате base64Binary в файл "путь файла".

НО формат там не xml, а 455 алпал ш498е9е4 ...
5. starik-2005 3051 07.08.15 12:58 Сейчас в теме
(4) Алексей777, ну правильно, вы XML-файл кодируете в Base64 и передаете. Соответственно, с другой стороны Вам надо его раскодировать.
6. Алексей777 99 07.08.15 13:12 Сейчас в теме
Спасибо, 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С?
8. starik-2005 3051 07.08.15 17:04 Сейчас в теме
(6) Алексей777, да все просто:
[quote]
Base64Значение (Base64Value)
Синтаксис:

Base64Значение(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Строка, закодированная по алгоритму base64.
Возвращаемое значение:

Тип: ДвоичныеДанные.

Описание:

Получает из строки закодированной по алгоритму base64 двоичные данные.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). [/quote]

Для Вас двоичными данными будет XML.
7. Алексей777 99 07.08.15 13:40 Сейчас в теме
Может в php надо использовать другие функции для получения передаваемого файла?
Есть в php функции работы с файлами, типа:

//Открывает файл в разных режимах
$fp = fopen('counter.txt', 'r'); // Бинарный режим

пробовал, не подходит, хотя файл также записывается :).
9. Алексей777 99 07.08.15 17:16 Сейчас в теме
Я так понимаю, что ответ кроется в следующем: нужно извлечь содержимое из сохраненного файла и сохранить это содержимое в новый файл.
10. Алексей777 99 07.08.15 17:26 Сейчас в теме
starik-2005, у меня ощущение, что правильный ответ кроется вот здесь:
http://forum.infostart.ru/forum86/topic114939/

Но, я пока не понимаю, как извлечь содержимое из файла.
11. starik-2005 3051 07.08.15 17:29 Сейчас в теме
(10) Алексей777, [quote]НО формат там не xml, а 455 алпал ш498е9е4 ...[/quote]

Ну дык перед записью переводите строку base64 в "двоичные данные" и пишите.
12. Алексей777 99 08.08.15 00:38 Сейчас в теме
Получилось!!!

//в параметре тот самый злополучный :) файл
ТекПутьКФайлу = ("C:\TempFiles\transfer650e8400-e29b-41d4-a716-446655440000");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ТекПутьКФайлу);

ТекстСтрока = ТекстовыйДокумент.ПолучитьТекст();
ДвоичнДанные = Base64Значение(ТекстСтрока);
ДвоичнДанные.Записать("C:\TempFiles\transferAllRight.xml");


И вуаля, в файле transferAllRight.xml уже не абра казябра, а нормальный формат XML!

Спасибо, Вам, starik-2005 и Fragster!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот