Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.0.0+

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 Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local mime = chilkat.Mime.new()

-- 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
--

local success = mime:load_mime_file("qa_data/mime/headless_binary_soap_mtom_mime.mim")
if not success then
    print(mime.last_error_text)
    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.
local numParts = mime.num_parts

-- The 1st part at index 0 is the application/xop+xml.  We're just going to extract the JPG and GIF image files..
local sbFilename = chilkat.StringBuilder.new()
local name = ""
local i = 1
local mp = chilkat.Mime.new()
while i < numParts do
    mime:part_at(i, mp)

    -- 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..
    sbFilename:append("qa_output/")
    name = mp:get_header_field_attribute("Content-Disposition", "name")
    sbFilename:append(name)
    sbFilename:append(".")
    sbFilename:append(mp.content_type)
    local numReplaced = sbFilename:replace("image/", "")
    mp:save_body(sbFilename:get_as_string())
    print("output file: " .. sbFilename:get_as_string())
    sbFilename:clear()
    i = i + 1
end

print("Success.")