Я делаю сообщение 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: <[email protected]>
Content-Type: application/pdf
Content-Transfer-Encoding: binary
%PDF-1.4
%ÈÁÄ×
<content removed>
25081
%%EOF
--MIME_Boundary--
Я попытался удалить все данные, не относящиеся к PDF, но это все равно неправильный двоичный файл.
есть идеи?
Из комментариев
Когда я делаю cfdump
на fileContent
, я получаю следующее:
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.
cfhttp.filecontent
с помощьюtoString()
попробуйте сбросить ее. Это покажет вам структуру, которую ColdFusion создает для вас, храня каждую часть информации.<cfdump var="#cfhttp.filecontent#" />
или в скриптеwriteDump(cfhttp.filecontent);
. Скопируйте этот вывод на свой вопрос выше. Как только мы узнаем поле, содержащее фактические двоичные данные, вам нужно будет декодировать base64 обратно в двоичный код перед представлением пользователю. binaryDecode. Что-то вроде<cfset binaryData=binaryDecode(cfhttp.filecontent.body,"Base64") />
- person Miguel-F   schedule 24.04.2017Class 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
- person cma0651   schedule 25.04.2017toByteArray()
, я получаю двоичные данные. Затем я сохраняю данные в файл и вижу части файла в формате xml и pdf. Если я возьму результаты и выполнюbinaryDecode
, я получуByteArray objects cannot be converted to strings.
.BinaryEncode
работает. - person cma0651   schedule 25.04.2017cfhttp
. Больше похоже на звонокcfinvoke
??? Можете ли вы предоставить код, который вы используете для вызова этой службы? - person Miguel-F   schedule 25.04.2017cfhttp.filecontent
Обычно я получаю обычные текстовые результаты, но я подозреваю, что, поскольку это многочастный ответ, я получил объект Java. Ли, поскольку в коде есть PHI-информация, я не могу предоставить все подробности, но могу заверить, что единственным содержимым, которое я удалил, был некоторый xml в части 1 и двоичный файл PDF во второй части. - person cma0651   schedule 26.04.2017Content-Transfer-Encoding: 8bit
и xml должна быть новая строка. (Я предполагаю, что он был обрезан случайно.) - person Leigh   schedule 27.04.2017