原谅我对SOAP的不熟悉。我的任务是保存通过第三方供应商的SOAP API提供给我们的多个pdf文件到我们的网络服务器。 供应商API的结果以
提供 xsd:element name="content" type="xsd:base64Binary"
我已经达到了这样的程度,我可以使用php将pdf输出到浏览器而不会出现以下代码:
$document=$vendor_soap_client->getPersonDocument($pid);
$filename= $name . $extension;
header("Content-type: " . $document->mime);
header("Content-Disposition: attachment; filename=" . $name. $extension);
print($document->content);
我假设从base64Binary类型的结果,我需要base64_decode。这只是给我的输出留下了一堆符号。我尝试将结果转换为字符串,然后保存为pdf。这让我更接近,至少pdf的文本写入文件,但原始格式不是,这是预期的。那么,我如何从API中获取原始pdf并将其保存到我们自己的网络服务器中?作为一个FYI - 是的,pdf的内容是我们的,我们可以下载它。我不是在这里尝试任何狡猾的事情。我只是迷失了如何从上面到我们的服务器上的pdf。现在,下一个明显的选择是执行上述操作,并一次保存每个pdf。可行,但繁重。
更新: XSD:
<xsd:complexType name="DocumentObject">
<xsd:all>
<xsd:element name="student_document_id" type="xsd:string" nillable="true"/>
<xsd:element name="document_label" type="xsd:string" nillable="true"/>
<xsd:element name="document_type" type="xsd:string" nillable="true"/>
<xsd:element name="mime" type="xsd:string" nillable="true"/>
<xsd:element name="size" type="xsd:integer" nillable="true"/>
<xsd:element name="content" type="xsd:base64Binary" nillable="true"/>
<xsd:element name="private" type="xsd:boolean" nillable="false"/>
<xsd:element name="created" type="xsd:dateTime" nillable="false"/>
<xsd:element name="modified" type="xsd:dateTime" nillable="false"/>
<xsd:element name="approved" type="xsd:boolean" nillable="false"/>
<xsd:element name="link" type="xsd:string" nillable="true"/>
<xsd:element name="student_id" type="xsd:string" nillable="true"/>
<xsd:element name="match_context" type="xsd:string" nillable="true"/>
<xsd:element name="reviewed_date" type="xsd:dateTime" nillable="true"/>
<xsd:element name="review_status" type="xsd:string" nillable="true"/>
<xsd:element name="review_comment" type="xsd:string" nillable="true"/>
<xsd:element name="reviewed_by" type="xsd:string" nillable="true"/>
<xsd:element name="resubmitted" type="xsd:boolean" nillable="true"/>
</xsd:all>
这就是你要求的吗?
执行file_put_contents的结果如下:
%PDF-1.5 %μμμμ 1 0 obj &LT;&GT;&GT;&GT; endobj 2 0 obj &LT;&GT; endobj 3 0 obj &LT;&GT; / x对象&LT;&GT; / ProcSet [/ PDF /文本/ ImageB / ImageC / ImageI]
/ Annots [9 0 R 12 0 R] / MediaBox [0 0 612 792] /目录4 0 R /组&lt;&gt; / Tabs / S / StructParents 0 GT;&GT; endobj 4 0 obj &LT;&GT; 流 xœμ= k“ÛÆ'ßU¥ÿ€IŠL¼æçÚº•Vr”xíÄR“«RîÍ...visÞ%¥(u?þ| {0 /
更新:嗯,事实证明用户错误是一个大问题。做一个fopen和fwrite就可以了,这是我尝试过的第一件事。但是,我使用WinScp来查看服务器上的文件,以确保它们正在被编写...但我也没有考虑使用它来实际查看pdfs的后果!所以,他们一直都是正确的。非常感谢你的回复!
答案 0 :(得分:2)
看起来$document->content
只是原始文件数据 - 未编码或任何内容。如果是这样的话,这应该可以解决问题:
file_put_contents($filename, $document->content);
如果没有,您是否可以提供指向Web服务的完整XSD的链接?