如何将 base64 编码的附件转换为文件(PDF、msg、eml)
How to convert base64 encoded attachment to file (PDF, msg, eml)
我们有一个从 ServiceNow 导出的 XML 文件,我们正在尝试将其导入我们的自定义 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);
可能让您感到困惑的一件事是 <compressed>
标志。因为这是真的,数据也被 gzip 压缩,所以附件从 byte[] 开始,然后被 gzip 压缩,分成块,并进行 base64 编码(每个块!)。
我不知道如何在 php 中具体执行此操作,但此策略应该有效:
每个块的 Base64 解码将为您提供每个块的 byte[]。
按位置顺序组合这些块,为您提供一个大字节流
将该流压缩到另一个应该是您的文件的大字节流中。
我们有一个从 ServiceNow 导出的 XML 文件,我们正在尝试将其导入我们的自定义 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);
可能让您感到困惑的一件事是 <compressed>
标志。因为这是真的,数据也被 gzip 压缩,所以附件从 byte[] 开始,然后被 gzip 压缩,分成块,并进行 base64 编码(每个块!)。
我不知道如何在 php 中具体执行此操作,但此策略应该有效: 每个块的 Base64 解码将为您提供每个块的 byte[]。 按位置顺序组合这些块,为您提供一个大字节流 将该流压缩到另一个应该是您的文件的大字节流中。