新手问题 Savon SOAP 返回的 PDF 数据流下载后打不开

zhg · 2017年08月21日 · 最后由 zhg 回复于 2017年08月21日 · 1485 次阅读

现在的项目中需要通过标准 SOAP 协议从接口获取数据,获取的数据应该是 PDF 二进制流数据,但是打印出来的文件无法打开!报错信息为文件已损坏或者使用了“预览”无法识别的文件格式。

我是使用 savon 来传递数据获取返回值值的。

返回值:

<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'><S:Body>
<GetAPACShippingLabelResponse xmlns="http://api.apacshipping.ebay.com/">
    <GetAPACShippingLabelResult>
        <Version>4.0.0</Version>
        <Ack>Success</Ack>
        <Message>GetAPACShippingLabel succeeded</Message>
        <Timestamp>2017-08-20T22:51:16.089-07:00</Timestamp>
        <InvocationID>1BB473DE928741CBA40C848F142EC9F5</InvocationID>
       <Label>JVBERi0xLjQKJeLjz9MKMiAwIG9iago8PC9MZW5ndGggNDgvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0KeJwr5HIK4TJQMLKwUAhJ4XIN4QrkKlQwVDAAQgiZnKugH5FmqOCSrxDIBQDgwgm9CmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JTcGFjZS9EZXZpY2VSR0IvU3VidHlwZS9JbWFnZS9CaXRzUGVyQ29tcG9uZW50IDgvV2lkdGggNDIzL0xlbmd0aCA5ODIzL0hlaWdodCA3Ni9GaWx0ZXIvRENURGVjb2RlPj5zdHJlYW0K/9j/4AAQSkZJRgABAQEBOwE7AAD/7gAOQWRvYmUAZIAAAAAB/9sAQwAMCAgICAgMCAgMEAsLCxAUDg0NDhQYEhMTExIYFBIUFBQUEhQUGx4eHhsUJCcnJyckMjU1NTI7Ozs7Ozs7Ozs7/9sAQwENCgoMCgwODAwOEQ4ODhEUDw8PD.......</Label>
    </GetAPACShippingLabelResult>
</GetAPACShippingLabelResponse>
</S:Body></S:Envelope>

'Label' 标签后面应该是二进制流的,现在直接打印出来的 PDF 文件无法打开。

base64 过吧

@ratazzi 没有!获取到 Label 里面的值就直接生成 PDF 文件了

我是说你所谓的二进制流根本就是 base64 过的,你看过 pdf 二进制流就知道你贴的这根本不是

@ratazzi 我看它也不像是二进制流,接口文档上面说是返回 Byte Array 类型数据!这个值还是需要转换一下吗?

说的直白一点就是 label 的值 base64 decode 再以二进制文件写入磁盘就 ok 了,国外好多快递都是这个做法

@ratazzi 好的 谢谢

zhg 关闭了讨论。 08月21日 17:35
需要 登录 后方可回复, 如果你还没有账号请 注册新账号