jakobward
06/01/2022, 11:32 PMjakobward
06/01/2022, 11:44 PMwebsolete
06/02/2022, 12:56 AMjakobward
06/02/2022, 12:57 AMjakobward
06/02/2022, 12:57 AMwebsolete
06/02/2022, 1:01 AMwebsolete
06/02/2022, 1:02 AMjakobward
06/02/2022, 1:03 AMwebsolete
06/02/2022, 1:05 AM/**
* Takes a binary multipart/mixed cfhttp result and parses out its parts
*
* @response struct the entire result of a cfhttp call
*
* @return struct struct with each body part set to a key (ofx, pdf (as base64), etc.)
*
*/
public any function parseMultipartHTTPResponse(
required any response
) {
var parsed = {};
// these setProperty statements allow for unexpected content formatting that can prevent the multipart processing
var system = createObject("java", "java.lang.System");
system.setProperty("mail.mime.multipart.ignoreexistingboundaryparameter", "true");
system.setProperty("mail.mime.multipart.allowempty", "true");
var dataSource = createObject("java", "javax.mail.util.ByteArrayDataSource").init(arguments.response.fileContent.toByteArray(), javacast("string",arguments.response.responseHeader["content-type"]));
var mimeParts = createObject("java", "javax.mail.internet.MimeMultipart").init(dataSource);
for ( var i = 0; i < mimeParts.getCount(); i++ ) {
try {
var bp = mimeParts.getBodyPart( javacast("int", i) ); // get next part
var tempFilename = "\XYZ_" & gettickcount() & "." & ( bp.isMimeType("application/pdf") ? "pdf" : "xml" ); // we'll need to write to disk as part of this process
var outputFile = createObject("java", "java.io.File").init( expandPath("/TempFiles") & tempFilename ); // we leverage the native java object method to write the file
bp.saveFile(outputFile); // save the file
if( bp.isMimeType("application/x-ofx") ) { // the xml part of the response
parsed["ofx"] = fileread( expandPath("/TempFiles") & tempFilename );
}
else if( bp.isMimeType("application/pdf") ) { // the pdf part of the response
var tempPdf = fileReadBinary( expandPath("/TempFiles") & tempFilename );
parsed["pdf"] = binaryEncode(tempPdf,"base64");
}
fileDelete( expandPath("/TempFiles") & tempFilename ); // cleanup
}
catch ( any e ) {
if( fileexists( expandPath("/TempFiles") & tempFilename ) ) {
fileDelete( expandPath("/TempFiles") & tempFilename ); // cleanup
}
rethrow;
}
}
return parsed;
}
websolete
06/02/2022, 1:06 AMwebsolete
06/02/2022, 1:07 AMwebsolete
06/02/2022, 1:07 AMwebsolete
06/02/2022, 1:07 AMwebsolete
06/02/2022, 1:07 AMjakobward
06/02/2022, 1:08 AMwebsolete
06/02/2022, 1:08 AMbhartsfield
06/02/2022, 11:47 AMAsher Densmore-Lynn
06/02/2022, 2:08 PMbhartsfield
06/02/2022, 2:25 PMAsher Densmore-Lynn
06/02/2022, 2:28 PMwebsolete
06/02/2022, 2:34 PMbhartsfield
06/02/2022, 2:34 PMAsher Densmore-Lynn
06/02/2022, 2:37 PMbhartsfield
06/02/2022, 2:42 PMbhartsfield
06/02/2022, 2:42 PMwebsolete
06/02/2022, 2:43 PMbhartsfield
06/02/2022, 2:44 PMjakobward
06/02/2022, 2:46 PMbhartsfield
06/02/2022, 2:46 PMwebsolete
06/02/2022, 2:48 PMbhartsfield
06/02/2022, 2:48 PMwebsolete
06/02/2022, 2:49 PMbhartsfield
06/02/2022, 2:50 PMbhartsfield
06/02/2022, 2:51 PMwebsolete
06/02/2022, 2:51 PMbhartsfield
06/02/2022, 2:53 PMwebsolete
06/02/2022, 2:53 PMbhartsfield
06/02/2022, 2:54 PMwebsolete
06/02/2022, 2:55 PMwebsolete
06/02/2022, 2:55 PMbhartsfield
06/02/2022, 3:16 PMScott Bennett
06/02/2022, 3:17 PMbhartsfield
06/02/2022, 3:17 PMScott Bennett
06/02/2022, 3:17 PMbhartsfield
06/02/2022, 3:17 PMjakobward
06/02/2022, 3:18 PMwebsolete
06/02/2022, 3:18 PMbhartsfield
06/02/2022, 3:18 PMScott Bennett
06/02/2022, 3:18 PMbhartsfield
06/02/2022, 3:19 PMjakobward
06/02/2022, 3:19 PMScott Bennett
06/02/2022, 3:20 PMjakobward
06/02/2022, 3:21 PM