【发布时间】:2017-09-21 12:57:33
【问题描述】:
我正在向 Web 服务发布 CFHTTP 帖子,该服务返回两部分(多部分),即 XML 和 PDF。我希望只获得 PDF。我的cfhttp.filecontent 是java.io.ByteArrayOutputStream 类型。当我执行toString() 时,我得到以下信息
第 1 部分
Content-Type: application/xop+xml; type="text/xml"; charset=utf-8
Content-Transfer-Encoding: 8bit
第 2 部分
Content-Type: application/pdf
Content-Transfer-Encoding: binary
我在 cfhttp.fileContent 中得到响应,数据如下所示
--MIME_Boundary
Content-ID: <aa82dfa.N51ec355b.3.15b86044531.59d6>
Content-Type: application/xop+xml; type="text/xml"; charset=utf-8
Content-Transfer-Encoding: 8bit
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">....</soapenv:Envelope>
--MIME_Boundary
Content-Id: <2958beaa-dd72-4879-9d80-cc19876b2c2a@example.jaxws.sun.com>
Content-Type: application/pdf
Content-Transfer-Encoding: binary
%PDF-1.4
%ÈÁÄ×
<content removed>
25081
%%EOF
--MIME_Boundary--
我尝试删除所有与 PDF 无关的数据,但它仍然不是有效的二进制文件。
有什么想法吗?
来自 cmets
当我在fileContent 上执行cfdump 时,我得到以下信息:
Class Name: java.io.ByteArrayOutputStream
Methods:
close() returns void
reset() returns void
size() returns int
toByteArray() returns byte[]
toString(java.lang.String) returns java.lang.String
toString() returns java.lang.String
toString(int) returns java.lang.String
write(byte[], int, int) returns void
write(int) returns void
writeTo(java.io.OutputStream) returns void
当我调用toByteArray() 时,我得到二进制数据。然后我将数据保存到一个文件中,我可以看到文件的 XML 和 PDF 部分。
【问题讨论】:
-
不要使用
toString()转换cfhttp.filecontent变量,而是尝试转储它。这将向您展示 ColdFusion 为您创建的保存每条信息的结构。<cfdump var="#cfhttp.filecontent#" />或在脚本中writeDump(cfhttp.filecontent);。将该输出复制到您上面的问题中。一旦我们知道包含实际二进制数据的字段,您将需要在呈现给用户之前将 base64 解码回二进制。 binaryDecode。类似<cfset binaryData=binaryDecode(cfhttp.filecontent.body,"Base64") /> -
感谢您的回复。当我对 fileContent 执行 cfdump 时,我得到以下信息,
Class Name: java.io.ByteArrayOutputStream Methods: close() returns void reset() returns void size() returns int toByteArray() returns byte[] toString(java.lang.String) returns java.lang.String toString() returns java.lang.String toString(int) returns java.lang.String write(byte[], int, int) returns void write(int) returns void writeTo(java.io.OutputStream) returns void -
当我调用
toByteArray()时,我得到一个二进制数据。然后我将数据保存到一个文件中,我可以看到文件的 xml 和 pdf 部分。如果我得到结果并执行binaryDecode,我会得到ByteArray objects cannot be converted to strings.。BinaryEncode工作。 -
你能给我们发帖的网址吗,我们可以试试?
-
@Leigh - 我明天会这样做。你的建议是在我得到我发布的解决方案之后提出的。
标签: coldfusion multipart mtom cfhttp