DataFlex
DataFlex
Extract Files from Binary SOAP MTOM MIME
See more MIME Examples
This example demonstrates how to extract files from a binary SOAP MTOM MIME document.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoMime
Integer iNumParts
Handle hoSbFilename
String sName
Integer i
Variant vMp
Handle hoMp
Integer iNumReplaced
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatMime)) To hoMime
If (Not(IsComObjectCreated(hoMime))) Begin
Send CreateComObject of hoMime
End
// In this example, we have a MIME file containing 8bit (non-encoded) binary data,
// and it is what I call "headless". MIME is headless when it omits
// the top-level header. The file we have here begins with the first
// boundary string.
// The structure the MIME to be loaded is:
// multipart/mixed (inferred because it is headless)
// application/xop+xml
// image/jpeg
// image/gif
// image/gif
//
Get ComLoadMimeFile Of hoMime "qa_data/mime/headless_binary_soap_mtom_mime.mim" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMime To sTemp1
Showln sTemp1
Procedure_Return
End
// The MIME file loaded in this example contains this:
// --uuid:e74486f4-52b0-44b6-b829-156810fae20d
// Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"
// Content-Transfer-Encoding: binary
// Content-ID: <root.message@cxf.apache.org>
//
// <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body> ... </soap:Body></soap:Envelope>
// --uuid:e74486f4-52b0-44b6-b829-156810fae20d
// Content-Type: image/jpeg
// Content-Transfer-Encoding: binary
// Content-ID: <beee83b7-166c-494c-890a-def990e9887b-1496@cxf.apache.org>
// Content-Disposition: attachment;name="-2049913191"
//
// BINARY DATA HERE...
//
// --uuid:e74486f4-52b0-44b6-b829-156810fae20d
// Content-Type: image/gif
// Content-Transfer-Encoding: binary
// Content-ID: <beee83b7-166c-494c-890a-def990e9887b-1497@cxf.apache.org>
// Content-Disposition: attachment;name="-2049913188"
//
// BINARY DATA HERE...
//
// --uuid:e74486f4-52b0-44b6-b829-156810fae20d
// Content-Type: image/gif
// Content-Transfer-Encoding: binary
// Content-ID: <beee83b7-166c-494c-890a-def990e9887b-1498@cxf.apache.org>
// Content-Disposition: attachment;name="-2049913185"
//
// BINARY DATA HERE...
//
// --uuid:e74486f4-52b0-44b6-b829-156810fae20d--
// Get the number of MIME sub-parts.
Get ComNumParts Of hoMime To iNumParts
// The 1st part at index 0 is the application/xop+xml. We're just going to extract the JPG and GIF image files..
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFilename
If (Not(IsComObjectCreated(hoSbFilename))) Begin
Send CreateComObject of hoSbFilename
End
Move 1 To i
Get Create (RefClass(cComChilkatMime)) To hoMp
If (Not(IsComObjectCreated(hoMp))) Begin
Send CreateComObject of hoMp
End
While (i < iNumParts)
Get pvComObject of hoMp to vMp
Get ComPartAt Of hoMime i vMp To iSuccess
// By looking at the MIME above, the "name" attribute of the Content-Disposition header field seems
// to be the only possible name we can use for each image..
Get ComAppend Of hoSbFilename "qa_output/" To iSuccess
Get ComGetHeaderFieldAttribute Of hoMp "Content-Disposition" "name" To sName
Get ComAppend Of hoSbFilename sName To iSuccess
Get ComAppend Of hoSbFilename "." To iSuccess
Get ComContentType Of hoMp To sTemp1
Get ComAppend Of hoSbFilename sTemp1 To iSuccess
Get ComReplace Of hoSbFilename "image/" "" To iNumReplaced
Get ComGetAsString Of hoSbFilename To sTemp1
Get ComSaveBody Of hoMp sTemp1 To iSuccess
Get ComGetAsString Of hoSbFilename To sTemp1
Showln "output file: " sTemp1
Send ComClear To hoSbFilename
Move (i + 1) To i
Loop
Showln "Success."
End_Procedure