У нас есть XML-файл, экспортированный из ServiceNow , который мы пытаемся импортировать в наше пользовательское приложение PHP.
Каждое вложение <sys_attachment>
разбивается на куски<sys_attachment_doc>
, который упорядочен элементом <position>
.
<sys_attachment>
<chunk_size_bytes>734003</chunk_size_bytes>
<compressed>true</compressed>
<content_type>application/pdf</content_type>
<encryption_context display_value="" />
<file_name>Filename.pdf</file_name>
</sys_attachment>
<sys_attachment_doc>
<data>[BASE64 ENCODED STRING HERE]</data>
<length>[STRING LENGTH]</length>
<position>0</position>
</sys_attachment_doc>
<sys_attachment_doc>
<data>[BASE64 ENCODED STRING HERE]</data>
<length>[STRING LENGTH]</length>
<position>1</position>
</sys_attachment_doc>
Мы попытались объединить строку и base64_decoding, но безрезультатно.
<?php
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="servicenow.pdf"');
//echo base64_decode($chunk0.$chunk1);
echo base64_decode($chunk0).base64_decode($chunk1);
?>
Мы не можем найтилюбая документация о том, как преобразовать эти вложения в файлы за пределами ServiceNow (PHP).Есть ли дополнительный шаг, который необходимо сделать перед декодированием строки и преобразованием в файл (PDF)
Редактировать: мне удается решить ее с помощью ответа @Joey.Я base64_decode куски, а затем объединить его.Объединенная строка фактически сжата GZIP.Мы использовали gzdecode () для создания PDF.
$attachment = base64_decode($chunk0).base64_decode($chunk1);
echo gzdecode($attachment);