HTTP/2 302
server: nginx
date: Tue, 20 Jan 2026 03:32:18 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20100910033802
location: https://web.archive.org/web/20100910033802/https://mimepull.dev.java.net/
server-timing: captures_list;dur=0.594715, exclusion.robots;dur=0.040980, exclusion.robots.policy;dur=0.029976, esindex;dur=0.008542, cdx.remote;dur=18.802461, LoadShardBlock;dur=246.191124, PetaboxLoader3.datanode;dur=116.615939, PetaboxLoader3.resolve;dur=36.404628
x-app-server: wwwb-app222-dc8
x-ts: 302
x-tr: 290
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
set-cookie: wb-p-SERVER=wwwb-app222; path=/
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 302
server: nginx
date: Tue, 20 Jan 2026 03:32:18 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20160531220421
location: https://web.archive.org/web/20160531220421/https://mimepull.dev.java.net/
server-timing: captures_list;dur=0.534879, exclusion.robots;dur=0.019013, exclusion.robots.policy;dur=0.010168, esindex;dur=0.008813, cdx.remote;dur=6.187607, LoadShardBlock;dur=91.409834, PetaboxLoader3.datanode;dur=181.450313, load_resource;dur=452.028240, PetaboxLoader3.resolve;dur=309.272569
x-app-server: wwwb-app222-dc8
x-ts: 302
x-tr: 574
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 302
server: nginx
date: Tue, 20 Jan 2026 03:32:20 GMT
content-type: text/html; charset=iso-8859-1
content-length: 210
x-archive-orig-date: Tue, 31 May 2016 22:04:21 GMT
x-archive-orig-server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/1.0.1m mod_perl/2.0.7 Perl/v5.14.2
location: https://web.archive.org/web/20160531220421/https://mimepull.java.net/
x-archive-orig-cache-control: max-age=0
x-archive-orig-expires: Tue, 31 May 2016 22:04:21 GMT
x-archive-orig-vary: Accept-Encoding
x-archive-orig-content-length: 210
x-archive-orig-connection: close
cache-control: max-age=1800
memento-datetime: Tue, 31 May 2016 22:04:21 GMT
link:
; rel="original",
; rel="timemap"; type="application/link-format",
; rel="timegate"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: WIDE-20160531195825-crawl800/WIDE-20160531212725-07292.warc.gz
server-timing: captures_list;dur=0.540402, exclusion.robots;dur=0.019885, exclusion.robots.policy;dur=0.009953, esindex;dur=0.010867, cdx.remote;dur=9.609439, LoadShardBlock;dur=214.354078, PetaboxLoader3.datanode;dur=149.542431, PetaboxLoader3.resolve;dur=780.034333, load_resource;dur=786.560912
x-app-server: wwwb-app222-dc8
x-ts: 302
x-tr: 1039
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 302
server: nginx
date: Tue, 20 Jan 2026 03:32:20 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20160531060915
location: https://web.archive.org/web/20160531060915/https://mimepull.java.net/
server-timing: captures_list;dur=0.655341, exclusion.robots;dur=0.023778, exclusion.robots.policy;dur=0.011040, esindex;dur=0.011958, cdx.remote;dur=55.496567, LoadShardBlock;dur=209.495240, PetaboxLoader3.datanode;dur=85.362910, PetaboxLoader3.resolve;dur=42.310328
x-app-server: wwwb-app222-dc8
x-ts: 302
x-tr: 293
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Tue, 20 Jan 2026 03:32:21 GMT
content-type: text/html;charset=utf-8
x-archive-orig-date: Tue, 31 May 2016 06:09:16 GMT
x-archive-orig-server: Apache-Coyote/1.1
x-archive-orig-last-modified: Fri, 30 Nov 2012 11:29:44 GMT
x-archive-orig-x-runtime: 87
x-archive-orig-cache-control: private, max-age=0, must-revalidate, max-age=0
x-archive-orig-content-length: 18982
x-archive-orig-set-cookie: _junction2_session=712d6b7df951efa573f5397883892645; path=/; HttpOnly
x-archive-orig-expires: Tue, 31 May 2016 06:09:16 GMT
x-archive-orig-vary: Accept-Encoding
x-archive-orig-connection: close
x-archive-guessed-content-type: text/html
x-archive-guessed-charset: utf-8
memento-datetime: Tue, 31 May 2016 06:09:15 GMT
link:
; rel="original",
; rel="timemap"; type="application/link-format",
; rel="timegate"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: NO404-WKP-20160531050907-crawl345/NO404-WKP-20160531054416-00324.warc.gz
server-timing: captures_list;dur=0.576215, exclusion.robots;dur=0.016976, exclusion.robots.policy;dur=0.008159, esindex;dur=0.031785, cdx.remote;dur=6.693050, LoadShardBlock;dur=129.148501, PetaboxLoader3.datanode;dur=134.327329, PetaboxLoader3.resolve;dur=57.543422, load_resource;dur=109.925016
x-app-server: wwwb-app222-dc8
x-ts: 200
x-tr: 288
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
content-encoding: gzip
MIME pull - Efficient handling of MIME attachments — Project Kenai
Download
Communicate
Contribute
Welcome to the Mimepull project. This project provides a streaming API to access attachments parts in a MIME message.
Often times, a large MIME message cannot be loaded into memory. Hence the whole message or attachment parts
are written to a file system and access to the attachment parts is provided using those files.
However, in some cases, the attachment parts can be accessed by applications in a streaming fashion, provided:
- The parts are accessed in the same order as they appear in the stream
- The parts are accessed only once. In such situations, the parts need not be written to file system (no matter how large message it is !)
Sample Usage
// Parts are accessed in order. The data is accessed using readOnce()
// and there shouldn't be any data stored in temp files.
public void testOrder() {
InputStream in = ...
String boundary = ...
MIMEConfig config = ...
MIMEMessage mm = new MIMEMessage(in, boundary, config);
MIMEPart partA = mm.getPart("partA");
InputStream ais = partA.readOnce();
MIMEPart partB = mm.getPart("partB");
InputStream bis = partB.readOnce()
MIMEPart partC = mm.getPart("partC");
InputStream cis = partC.readOnce()
}
Implementation
MIME message parsing is done using pull-parsing, much similar to
StAX in XML world. The MIMEParts
are constructed lazily, and parsing is triggered by applications while reading the attachment parts.
MIMEConfig provides various configuration options to control parsing and storing MIME parts.
It is also possible to read MIME parts in any order and multiple times, but doing so may create
attachment parts on the file system.
The latest implementations provide also Content-Encoding support.
Terms of Use ;
Privacy Policy ;
Copyright ©2013-2016 (revision 20160325.c4a3dc8 )