Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отправка pdf на сайт через HTTP сервис, ДвоичныеДанные и Base64

Отправка pdf на сайт через HTTP сервис, ДвоичныеДанные и Base64
Я
   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)

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует