【问题标题】:How to convert base64 encoded attachment to file (PDF, msg, eml)如何将 base64 编码的附件转换为文件(PDF、msg、eml)
【发布时间】:2018-10-22 19:46:11
【问题描述】:

我们有一个从 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);

【问题讨论】:

  • 先合并base64字符串再解码不是更有意义吗?

标签: php xml pdf base64 servicenow


【解决方案1】:

&lt;compressed&gt; 标志可能会让您感到困惑。由于这是正确的,因此数据也被压缩了,所以附件从 byte[] 开始,然后被压缩,分成块,并进行 base64 编码(每个块!)。

我不知道具体如何在 php 中执行此操作,但此策略应该有效: 每个块的 Base64 解码将为每个块提供一个 byte[]。 按位置顺序组合这些块,为您提供一个大字节流 gunzip 将该流压缩到另一个应该是您的文件的大字节流中。

【讨论】:

  • 你是对的。夹头实际上是 gzip 编码的。
猜你喜欢
  • 2015-06-12
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 2023-03-14
  • 2022-12-15
  • 2019-10-27
相关资源
最近更新 更多