当前位置: 首页 > 知识库问答 >
问题:

使用基于SOAP api的base64Binary的PHP创建文件

金正阳
2023-03-14

请原谅我对肥皂不太熟悉。我的任务是将通过第三方供应商的SOAP API提供给我们的多个pdf文件保存到我们的Web服务器上。供应商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并将其保存到我们自己的WebServer中呢?作为一个通知-是的,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<>>endobj 2 0 obj<>endobj 3 0 obj<>/xObject<>/ProcSet[/pdf/text/imageB/imageC/imagei]

/注释[9 0 R 12 0 R]/Mediabox[0 0 612 792]/Contents 4 0 R/group<>/tabs/s/structparents0>endobj4 0 obj<>stream x??=k“[字斟句酌”|“vr”x??R'??“…vis??%?(U??{0/

更新:嗯,结果发现用户错误是这里的大问题。做一个fopen和fwrite就成功了,这是我尝试的第一件事。然而,我使用WinScp查看服务器上的文件,以确保它们正在编写...但我也没有考虑使用它查看PDF的后果!!所以,他们一直都是正确的。谢谢你的回复!

共有1个答案

曾永新
2023-03-14

看起来$document->content只是原始文件数据-没有编码或其他。如果是这样的话,这应该起到了一定的作用:

file_put_contents($filename, $document->content);

如果不是,您能为web服务提供完整XSD的链接吗?

 类似资料:
  • 我有一个PHP中的SOAP客户机,它调用WSDL服务。其中一个函数返回base64binary数据。我一直在试着解码,但没有任何运气。 base64_decode($encoded_base64data)将不起作用。我尝试使用带有各种参数的base_convert()和mv_convert_encoding(),但无法得到正确的结果。 编码的结果数据以: 谢谢 编辑 我使用一个新的__doRequ

  • 我有两个文件。 生成文件 从中搜索字符串,如,并在文件中匹配它并替换它。 搜索 替换为 我尝试了以下代码搜索目标字符串。但是,无法生成预期的输出。

  • 问题内容: 我想创建一个csv文件,但是当我运行代码时,它返回一个空白页,没有csv文件。我使用PHP5。我使用以下代码: 谢谢! 问题答案: 其空白,因为您正在写信。您应该写到using 代替,还应该发送标头信息以表明它是csv。 例

  • 问题内容: 是否可以基于层次结构/ cte创建视图? 我看过一个有关如何基于链接递归查询生成结果集的示例。 我已经附上了ddl和声明。 谢谢你, 埃尔默 问题答案: 后已被指定(超出右括号),您需要选择从CTE的所有值: 这是构成视图的实际选择查询。 这是一个完整的工作示例,其中选择了视图的最终输出,以及一些其他语句,以允许这些语句在SQL Server Management Studio中一次执

  • 问题内容: 我有一个基于Maven的Spring-WS客户端项目,我希望将其打包为一个jar。在日食中,一切正常运行。当我尝试将其打包为可执行jar时,由于Spring jar不包含在我的应用程序jar中,因此出现ClassNotFound异常。 因此,我添加了maven-shade-plugin以将我的所有依赖项都包含在应用程序jar中。当我查看我的应用程序jar时,会看到包含的所有依赖项中的所

  • 问题内容: 我创建了一个用于创建表达式的函数 现在,当我用 然后就可以了 但是当我通过时 然后,它给出错误,即abc不是列。 我试图将其转换 但这是行不通的。 如果我打电话给我 有没有办法获取operator1的类型,并在此基础上创建能够映射到相同内容类型的literal_colum? 问题答案: 任何文字值都可以转换为表达式构造: