You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:从MTOM提取的二进制数据生成无效ZIP,如何解决?

解决MTOM提取ZIP二进制后写入无效的问题

以下是几个排查和解决方向:

  • 确认二进制数据是否经过编码
    MTOM中的二进制内容通常会用base64编码传输,如果提取时直接将编码后的字符串写入文件,生成的ZIP必然无效。先检查提取的数据是否为base64格式,若是则先解码再写入:

    // 假设$extracted_data是从MTOM中提取的编码字符串
    $raw_zip_data = base64_decode($extracted_data);
    file_put_contents('TEST.ZIP', $raw_zip_data);
    
  • 检查数据提取是否完整且无冗余
    MTOM包含MIME头和边界分隔符,提取时如果误将这些非ZIP内容(比如Content-Type、--boundary这类行)包含进去,会直接破坏ZIP结构。确保只提取<xop:Include>指向的纯二进制流部分,不要附带任何MIME头信息。

  • 避免字符串操作破坏二进制数据
    不要对提取的二进制数据使用trim()、str_replace()这类字符串处理函数——ZIP文件的开头是固定的PK(十六进制504b0304),如果被意外修改或截断,文件就会失效。可以用以下代码验证数据开头:

    echo bin2hex(substr($raw_zip_data, 0, 4));
    // 正常输出应为504b0304
    
  • 指定二进制写入模式
    在Windows环境下,PHP默认的文本模式会转换换行符,导致二进制文件损坏。写入时显式指定FILE_BINARY标志:

    file_put_contents('TEST.ZIP', $raw_zip_data, FILE_BINARY);
    
  • 使用成熟的MTOM解析库
    手动提取容易出错,建议用PHP的SOAP扩展自带的MTOM处理能力,或者第三方MTOM解析工具,确保完整正确地提取二进制附件。

内容的提问来源于stack exchange,提问作者Asher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:32:34