如何在Coldfusion中解析多部分/混合数据

时间:2019-09-23 19:48:39

标签: arrays coldfusion blob multipart cfimage

我正在使用REST服务,该服务将图像的斑点作为多部分/混合数据的一部分返回。内容中可以有1张或更多图片。此Blob的边界在Content-Type中返回。如果此多部分内容的边界是例如b4081556-a000-48d9-a4e5-xyz345,则响应看起来像这样: --boundary内容类型:image / jpeg BLOB1 --boundary内容类型:image / jpeg BLOB2 --boundary内容类型:image / jpeg BLOB3 --boundary-

我需要将此响应解析为单个图像文件(斑点),并将其显示在前端。我正在ColdFusion上进行此操作,并且尝试了所有一切都没有运气。为了简单起见,我想首先使用一个带有一个图像的简单Blob。然后从中消除封装边界,并将内容读取到变量中,但是我不断收到此错误:

ColdFusion无法从指定的源文件创建图像。  确保该文件是有效的图像文件。

Screen shot of error message 这是我尝试提取封装边界的内容:

    options.series[0].data = props.data.map((data)=> {
        if (10 < data.unit_sale_price && data.unit_sale_price < 140){
            let saleDate = new Date(data.date)
            let itemDate = Date.UTC(saleDate.getFullYear(), saleDate.getMonth(),1)
            return [itemDate, data.unit_sale_price]
        }

        return null;
    })

我也尝试使用ImageNew(),但最终出现相同的错误。我不确定是否遗漏了一些东西。我开始怀疑是否从响应中提取封装边界,然后使用文件内容是正确的(唯一的方法)?

如果那是唯一的方法,那么将字节数组转换为字符串,提取图像内容,然后将其转换回二进制以进行处理是个好主意吗?有没有更好的办法?

这是我第一次使用Multipart数据,任何帮助将不胜感激!预先感谢。

响应屏幕截图:

Screen shot of response

1 个答案:

答案 0 :(得分:2)

感谢@Ageax在此方面的帮助。我非常感谢!

我的解决方案与this并没有太大区别。唯一的区别是涉及图像/缩略图,并且指出它不需要嵌入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>