Имя: Пароль:
1C
1С v8
Отправка pdf на сайт через HTTP сервис, ДвоичныеДанные и Base64
0 DosBot
 
14.05.19
09:59
Платформа 8.3.13.1644
Формирую ответ на json-запрос (обмен "с сайтом"): формирую печатную форму запрашиваемого документа и отправляю его содержимое (ДвоичныеДанные закодированные в Base64):
        ...
    ПотокФайла = Новый ПотокВПамяти();    
    ТабДокумент.Записать(ПотокФайла, ТипФайлаТабличногоДокумента.PDF);
    ДвоичныеДанныеПечати = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные();
    Ответ_.PrintForm = Base64Строка(ДвоичныеДанныеПечати);
        ...
Проблема: прогер php утверждает, что после декодирования на стороне сайта pdf-файл не читается.

Для отладки пробовал делать в 1ске делать обратное преобразование и всё читается: Ответ_.PrintForm -> ДвоичныеДанныеПечати -> Файл pdf:

    ДД1 = Base64Значение(ТекДанные_.PrintForm);
    ДД1.Записать(КакойТоПутьСохранения+ИмяФайла+".pdf");

Не могу понять где затык.
Пробовал онлайн декодировщики (например  https://www.motobit.com/util/base64-decoder-encoder.asp) - тоже, как и "на сайте", НЕ получается получить читаемый pdf (если скопипастить текст из ТекДанные_.PrintForm)

ЧЯДНТ?
1 DosBot
 
14.05.19
10:14
Пробовал тем же методом передавать картинку 3,8 мб. .. всё получилось без проблем. с PDF фантастика какая то
2 palsergeich
 
14.05.19
10:18
Нормально PDF таким образом передается на сайт.
Я думаю надо постучать по прогеру PHP
3 DosBot
 
14.05.19
10:23
на стороне сайта код такой:

...
$decoded = base64_decode($data);
$file = 'invoice.pdf';
file_put_contents($file, $decoded);

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}
...

может тут где ошибка? >_<
4 DosBot
 
14.05.19
10:25
Ну или там сайт ответ как=то преобразуется и строка с PrintForm интерпретируется неверно?
5 DosBot
 
14.05.19
13:38
помог совет в (2) :)
Решилось доработкой погромистом PHP. Его коммент на сей счёт:

"Собственно не менял ничего. Использовал один из методов, которые уже пытался применить. Дело в неправильной последовательности данных файла. При копировании из памяти, видимо, повреждалась его структура...
Окончание файла иное - заканчивается на знак ="

Как то так
6 Поpyчик-4
 
14.05.19
14:07
Самому освоить php не вариант?
7 DosBot
 
14.05.19
17:03
(6) пока не было надобности.
Поле 1сных бескрайних просторов ещё не вспахано..