Как анализировать многочастные / смешанные данные в Coldfusion - PullRequest
2 голосов
/ 23 сентября 2019

Я работаю со службой REST, которая возвращает большое количество изображений как часть многочастных / смешанных данных.В содержании может быть 1 или более изображений.Граница для этого большого двоичного объекта возвращается в Content-Type.Если граница этого многокомпонентного контента, например, b4081556-a000-48d9-a4e5-xyz345, ответ выглядит примерно так: --boundary Content-Type: image / jpeg BLOB1 --boundary Content-Type: image / jpegBLOB2 - borderary Content-Type: image / jpeg BLOB3 --boundary -

Мне нужно проанализировать этот ответ в отдельных файлах изображений (BLOB-объектов) и отобразить их на внешнем интерфейсе.Я делаю это на ColdFusion и попробовал все без удачи.Для простоты я сначала хотел использовать простой шарик с одним изображением.Затем удалите из него границы инкапсуляции и прочитайте содержимое в переменную, но я продолжаю получать эту ошибку:

ColdFusion не удалось создать изображение из указанного исходного файла.Убедитесь, что файл является допустимым файлом изображения.

Screen shot of error message Вот что я пытался извлечь из границы инкапсуляции:

<cfset thumbnail_filecontent = currPageThumnail_raw_resp.fileContent.toByteArray()>
<cfset thumbnail_str = toString(thumbnail_filecontent)>

<!---remove the encapsulation boundary--->
<cfset content1 = removeChars(thumbnail_str, 1, 64)> 
<cfset content2 = Left(content1, Len(content1)-43)>

<!---Convert the string into binary--->
<cfset image_content = toBinary(toBase64(content2))>

<cfimage action="INFO" source="#image_content#" structname="objImageInfo" />
<cfdump var="#objImageInfo#"><cfabort>

Я пыталсяиспользуйте ImageNew () также, но в конечном итоге с той же ошибкой.Я не уверен, что я что-то упустил.Я начинаю задаваться вопросом, является ли извлечение границы инкапсуляции из ответа, а затем работа с содержимым файла правильным (и единственным?) Способом сделать это?

Если это единственный способ, то будет ли хорошей идеей преобразовать байтовый массив в строку, извлечь содержимое изображения и затем преобразовать его обратно в двоичный файл для его обработки?Есть ли способ лучше?

Я впервые работаю с данными Multipart, и любая помощь будет принята с благодарностью!Заранее спасибо.

Снимок экрана с ответом:

Screen shot of response

1 Ответ

2 голосов
/ 24 сентября 2019

Спасибо @Ageax за помощь в этом.Я очень ценю это!

Мое решение мало чем отличается от этого .Единственное отличие состоит в том, что у меня есть изображения / миниатюры, и, как указывалось, для него не нужна граница, встроенная в Content-Type.

<cfscript>
            var path = GetDirectoryFromPath(GetCurrentTemplatePath());
            destination = path & "\thumbnails\";
            contentType = "multipart/mixed";
            byteArrayDS = createObject("java", "javax.mail.util.ByteArrayDataSource").init(thumbnail_filecontent, contentType);
            mimeMP = createObject("java", "javax.mail.internet.MimeMultipart").init(byteArrayDS);

            // loop through parts
            for (i = 0; i < mimeMP.getCount(); i++) {
                writeOutput("<br>Processing part["& i &"]");
                bodyPart = mimeMP.getBodyPart( javacast("int", i)); 

                // **** NOTE: Update directory path ****
                if (!isNull(bodyPart)) {
                    outputFile = createObject("java", "java.io.File").init(destination &"thumbnail"& i &".png");
                    bodyPart.saveFile(outputFile);
                    writeOutput("<br>Saved: "& outputFile.getAbsolutePath());
                }
            } 
        </cfscript>
...