C
C
Parse MIME to get Binary Data (such as GIF, JPG, or any binary file)
See more MIME Examples
Demonstrates how to parse a MIME to get binary data. This example extracts the image data for a GIF image to an in-memory byte array, and also to a file.This example uses a MIME test file located at http://www.chilkatsoft.com/testData/sampleMime2.txt. It contains the following MIME:
Content-Type: multipart/mixed; boundary="------------080707010302060306060800"; This is a multi-part message in MIME format. --------------080707010302060306060800 Content-Type: text/plain Content-Transfer-Encoding: 7bit This is the plain-text body. --------------080707010302060306060800 Content-Disposition: attachment; filename="starfish.gif"; Content-Transfer-Encoding: base64 Content-Type: image/gif; name="starfish.gif"; R0lGODlhIAAgAPcAAP///+/v7/f39+/n5/fv7//39/fn597OzufW1tbGxs69vffe3u/W1salpZQQ EIQYEJwQCJQYCJwYCM6clL2Ee5wpGIwhEK0YANatpdalnHMYCKUhCJQYAKUYAM6Ec5QhCJwhCPfW zu/Oxta1rb17a6UhAK0hAPe9rb2Ec7V7a71rUpwpCL0xCJwhAOfOxta9tcatpdallM6cjMaUhK1C IZwxELU5EK0xCLUxCN61pcacjK1rUrVaOaVKKZxCIZwxCKUxCL05CLUxAM6llO+1nMZzUr1rSrVS KaVCGK1CGLVCEJQxCK05CLU5CIwpAKUxAK0xAM69tffWxrVrSrVaMbVKGMZKEL1CCLU5AP/v597O xufGtcallNaljLWEa96ce9aUc717Wq1aMcZjMbVaKbVSIa1KGL1SGJw5CK1CCLVCCMZKCM5KCMZC APfn3tbGvc57Ss5aGMZSENZaEL1KCM5SCLVCAMZKAPfezvfOte/GrdatlN6cc9aEUr1rOc5jIdZj GL1SEM5aELVKCMZSCNZaCL1KAOfOvc57Qs5jGNZjEM5aCMZSAN5aAO/OtefGrcZjGM5jEN5rELVS CMZaCN5jCOdrCM5aAO/Gpc5rGMZjENZrEN5jAOdrAOfe1t6MQtZ7Kd57IdZzGM5rEMZjCNZrCM5j ANbOxu/Wve+9jPe9hO+1e+etc85zGO+EGMZrENZzEM5rCN5zCO97COdzAO/n3u+1c+ecSt6UQs57 Ie+MIdZ7GOeEGM5zEO+EELVjCOd7CO+ECOd7AO/Ope+tWuelUu+UKeeMGOeEEO+MEOeECO+EAO/G jO+cKfeUEO+MCO+tSuecMeeUGN6MEOeMCO+UCO+tQuelOe+lMe+lKe+cGOeUEO+cEOeUCN6MAO+U AOe9c/e1Oe+lId6UEO+cCPe9Qve1Me+lEOecCO+lCOe1Su+1OeelGO+tGPetCPetAO+9Qve1GO+1 EPe9CPe9APf37+fv5/f//+/v9/fv9+fe5+/e5869xufW3t7GzgAAACwAAAAAIAAgAAAI/wABCBxI sKDBgwgTFgCwMKHDhwyHYWoIsWIBZsdyHaoIcaGbaNQ0ZeBYEROvV0pmCCDp8B4rZaOUcGHpcIEx aqPMYLjHMcsCAwgxkRv3q8wLnhAdfWpmDRwqAgQFEEvHLlCZNxwfpVmkDJ04dczc3LsXQtq4XWh8 aGH48F49FDUC9UInT941W6luCUOWyQmSLST3eUnChNS4c9SooQuGDNkrIIrA1MqXr0A+AyFC4Kln kMAQKljotJJGDZklS9PkyEHGLZu1ctbCmWvXThurfAbvHSii5kegxpYqtRpEKFnid/TSneu2LRYh P/0Q1tJRgYOZV71UL5LEK1KiV68yVf+xgaOKmAZICd5bmA8FEyZQlMjRRAhQGQv4QQSJL8ZLFHwP 6aFIJXNIEkggcgQhwYIlKEFFGDKcEgBCBVCkByC0IAMJGnSAYsUNEmzAgw4HBJBeQisZcAswjqGh wQeBKGIFFD0ocCJE9diyjTKRLPHBAx/cEAcdgxgx4Vg3HnSPKs4E00sNEYDwgQksQDLJIohMSJIj ugSTCRA/ILFDCjTckUkrpYiCAEluYCMLJCsoMQUM9gjQRSSL7CLJJjmQxMw3kQChxA78IFULHIK0 MgonXyR5UAHWVBKIEmEcUJAIYxgSSSF94AZRPrgsQgUF0RmUgWpy/LFmRYdMkACAANwrWA8cbAhi RZ8cjRWro0QEEsQVGTiKkLAM5QNGFWrAQFNLBIzABQPLRktQQAA7 --------------080707010302060306060800--
Chilkat C Downloads
#include <C_CkMime.h>
#include <C_CkByteData.h>
#include <C_CkFileAccess.h>
void ChilkatSample(void)
{
BOOL success;
HCkMime mime;
HCkMime part2;
HCkByteData binaryData;
HCkFileAccess fac;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
mime = CkMime_Create();
// Load the sampleMime2.txt file into the MIME object.
// (This file is available at https://www.chilkatsoft.com/testData/sampleMime2.txt )
success = CkMime_LoadMimeFile(mime,"sampleMime2.txt");
if (success == FALSE) {
printf("%s\n",CkMime_lastErrorText(mime));
CkMime_Dispose(mime);
return;
}
// The GIF image is the 2nd sub-part located directly under the
// top-level MIME node. Indexing begins at 0, therefore the 2nd
// sub-part is at index 1.
part2 = CkMime_Create();
success = CkMime_PartAt(mime,1,part2);
if (success == FALSE) {
printf("%s\n",CkMime_lastErrorText(mime));
CkMime_Dispose(mime);
CkMime_Dispose(part2);
return;
}
binaryData = CkByteData_Create();
// The GetBodyBinary method returns the binary bytes
// of the part's body, automatically decoded from whatever
// content-transfer-encoding might be used (such as base64).
success = CkMime_GetBodyBinary(part2,binaryData);
// We now have the binary bytes of the GIF image in binaryData.
// Save it to a file.
fac = CkFileAccess_Create();
success = CkFileAccess_WriteEntireFile(fac,"out1.gif",binaryData);
if (success == FALSE) {
printf("%s\n",CkFileAccess_lastErrorText(fac));
CkMime_Dispose(mime);
CkMime_Dispose(part2);
CkByteData_Dispose(binaryData);
CkFileAccess_Dispose(fac);
return;
}
// An easier way to save the body content to a file,
// assuming your application does not need to access
// the binary data in-memory, is to call SaveBody
success = CkMime_SaveBody(part2,"out2.gif");
if (success == FALSE) {
printf("%s\n",CkMime_lastErrorText(part2));
CkMime_Dispose(mime);
CkMime_Dispose(part2);
CkByteData_Dispose(binaryData);
CkFileAccess_Dispose(fac);
return;
}
printf("Finished.\n");
CkMime_Dispose(mime);
CkMime_Dispose(part2);
CkByteData_Dispose(binaryData);
CkFileAccess_Dispose(fac);
}