<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Fastupload Home</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>Recent changes to Fastupload Home</description><atom:link href="https://sourceforge.net/p/fastupload/wiki/Fastupload%20Home/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 05 Jan 2013 08:28:20 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/fastupload/wiki/Fastupload%20Home/feed" rel="self" type="application/rss+xml"/><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v16
+++ v17
@@ -32,9 +32,7 @@
 &lt;/code&gt;

 In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,  all data parts split by boundary are parsed an put into a list. {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart data whether is a uploading file or normal input. For example, in a form HTML code is. ie.
- &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding 
- &lt;code&gt;MultiPart&lt;/code&gt; object is not a file, to a no-file type
- &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of  it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding &lt;code&gt;MultiPart&lt;/code&gt; object is not a file, to a no-file type &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of  it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
   &lt;li&gt;&lt;code&gt;&amp;lt;input type="file" /&amp;gt;&lt;/code&gt;, regarding
  &lt;code&gt;MultiPart&lt;/code&gt; object is a file, to a file type
  &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload provides &lt;code&gt;toFile(String)&lt;/code&gt; method to write content of current multipart stream into a file. And &lt;code&gt;getInputStream()&lt;/code&gt; to open a inputream for  current multipart stream. so APIs user can access it directly.&lt;/li&gt;
@@ -57,7 +55,7 @@
  }
 &lt;/code&gt;  

- As you see, most code is like the first way, the code snippet change the parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object.
+As you see, most code is like the first way, the code snippet change the parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object.

  &lt;code&gt;
  FileFactory fileFactory = FileFactory.getInstance();
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Sat, 05 Jan 2013 08:28:20 -0000</pubDate><guid>https://sourceforge.netfb43963236b8e9b4f517084d011881101f5d1f2d</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v15
+++ v16
@@ -2,7 +2,6 @@
 Fastupload is the fastest form-based file upload java programming component so far. The component is based on RFC1867, written for java and j2ee development zone. It uses high performance byte-search algorithm to parse the multipart/form-data request, afterward save data within boundaries into the file system or save data into buffer in memory. Also, it provides a through resolution to resolve the encoding issue for text file uploading in multipart/form-data request. The component has the ability to filter off data within boundaries by content-type or file extension name specified in the processing of parse multipart/form-data headers.

 ##Features##
-
 * support multiple boundaries
 * support parsing sub-boundary
 * supply resolution for uni-code text through
@@ -12,7 +11,6 @@
 * support struts2

 Refer to &lt;a href="http://www.ietf.org/rfc/rfc1867.txt"&gt;RFC1867&lt;/a&gt;, High level API for multipart/form-data &lt;code&gt;ServletInputStream&lt;/code&gt; parsing. Sometime web site need to receives large size of uploading file, sometime web site need to receives a plenty of small size of uploading file in the high throughput. Fastupload provides two way to parse &lt;code&gt;ServletInputStream&lt;/code&gt; and very simple APIs for variant requirements from high performance web site.
-

 ##Basic Usage##

@@ -33,18 +31,15 @@
 }
 &lt;/code&gt;

-
- In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,  all data parts split by boundary are parsed an put into a list. {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart data whether is a uploading file or normal input. For example, in a form HTML code is. ie.
+In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,  all data parts split by boundary are parsed an put into a list. {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart data whether is a uploading file or normal input. For example, in a form HTML code is. ie.
  &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding 
  &lt;code&gt;MultiPart&lt;/code&gt; object is not a file, to a no-file type
  &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of  it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
   &lt;li&gt;&lt;code&gt;&amp;lt;input type="file" /&amp;gt;&lt;/code&gt;, regarding
  &lt;code&gt;MultiPart&lt;/code&gt; object is a file, to a file type
- &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload provides
- &lt;code&gt;toFile(String)&lt;/code&gt; method to write content of current multipart
- stream into a file. And &lt;code&gt;getInputStream()&lt;/code&gt; to open a inputream for  current multipart stream. so APIs user can access it directly.&lt;/li&gt;
+ &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload provides &lt;code&gt;toFile(String)&lt;/code&gt; method to write content of current multipart stream into a file. And &lt;code&gt;getInputStream()&lt;/code&gt; to open a inputream for  current multipart stream. so APIs user can access it directly.&lt;/li&gt;

- The second way is read 8K bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; to a  buffer, then parse multipart data within two boundaries, create disk file for  it and write content data in the temporary file when found a multipart data. read 8K bytes next until all byte of &lt;code&gt;ServletInputStream&lt;/code&gt; is read and parsed. Finally return a list of {@link MultiPart}. This way only need 8K buffer extra. It's very useful when receive a large size of file. Here are simple code snippet to show this usage way.
+The second way is read 8K bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; to a  buffer, then parse multipart data within two boundaries, create disk file for  it and write content data in the temporary file when found a multipart data. read 8K bytes next until all byte of &lt;code&gt;ServletInputStream&lt;/code&gt; is read and parsed. Finally return a list of {@link MultiPart}. This way only need 8K buffer extra. It's very useful when receive a large size of file. Here are simple code snippet to show this usage way.

  &lt;code&gt;
  FileFactory fileFactory = FileFactory.getInstance();
@@ -62,8 +57,7 @@
  }
 &lt;/code&gt;  

- As you see, most code is like the first way, the code snippet change the parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object
- 
+ As you see, most code is like the first way, the code snippet change the parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object.

  &lt;code&gt;
  FileFactory fileFactory = FileFactory.getInstance();
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Fri, 04 Jan 2013 12:35:36 -0000</pubDate><guid>https://sourceforge.net1437e908b0669fe95b460dc111a989787ad99706</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v14
+++ v15
@@ -34,8 +34,7 @@
 &lt;/code&gt;

- In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,  all data parts split by boundary are parsed an put into a list. {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart data whether is a uploading file or normal input. For example, in a form HTML
-code is. ie.
+ In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,  all data parts split by boundary are parsed an put into a list. {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart data whether is a uploading file or normal input. For example, in a form HTML code is. ie.
  &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding 
  &lt;code&gt;MultiPart&lt;/code&gt; object is not a file, to a no-file type
  &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of  it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
@@ -96,6 +95,9 @@
 listener.progress();
 &lt;/code&gt; 

+##Charset Encoding##
+Tobe done..
+
 ##Maven Coordinate##
 you can add the dependency to your POM.xml, such that Maven resolve dependency automatically.

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Fri, 04 Jan 2013 12:33:19 -0000</pubDate><guid>https://sourceforge.net8f312f6509df362a4647f91880fd3524d23ab40c</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v13
+++ v14
@@ -11,62 +11,43 @@
 * faster performance, low memory occupy and high stability
 * support struts2

-Refer to &lt;a href="http://www.ietf.org/rfc/rfc1867.txt"&gt;RFC1867&lt;/a&gt;, High
-level API for multipart/form-data &lt;code&gt;ServletInputStream&lt;/code&gt; parsing.
-Sometime web site need to receives large size of uploading file, sometime web
-site need to receives a plenty of small size of uploading file in the high
-throughput. Fastupload provides two way to parse
-&lt;code&gt;ServletInputStream&lt;/code&gt; and very simple APIs for variant requirements
-from high performance web site.
+Refer to &lt;a href="http://www.ietf.org/rfc/rfc1867.txt"&gt;RFC1867&lt;/a&gt;, High level API for multipart/form-data &lt;code&gt;ServletInputStream&lt;/code&gt; parsing. Sometime web site need to receives large size of uploading file, sometime web site need to receives a plenty of small size of uploading file in the high throughput. Fastupload provides two way to parse &lt;code&gt;ServletInputStream&lt;/code&gt; and very simple APIs for variant requirements from high performance web site.

 ##Basic Usage##

-The first way is read all bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; into a
-buffer, then parse multipart data within two boundaries.
-&lt;code&gt;FastUploadParser&lt;/code&gt; parse multipart/form-data input stream with the
-way in default. we recommend it. Here are a sample code snippet.
+The first way is read all bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; into a buffer, then parse multipart data within two boundaries.
+&lt;code&gt;FastUploadParser&lt;/code&gt; parse multipart/form-data input stream with the way in default. We recommend it. Here are a sample code snippet.

-
-  FastUploadParser fastUploadParser = new FastUploadParser(request);
- List&amp;lt;MultiPart&amp;gt; list = fastUploadParser.parseList();
- for (MultiPart e: list){
+&lt;code&gt;
+FastUploadParser fastUploadParser = new FastUploadParser(request);
+List&amp;lt;MultiPart&amp;gt; list = fastUploadParser.parseList();
+for (MultiPart e: list){
    if (e.isFile()){
-       System.out.format("input field name: %s, file name:%s%n", e.getFieldName(), e.getFileName());
+   System.out.format("input field name: %s, file name:%s%n", e.getFieldName(), e.getFileName());
            e.toFile( /file/ ) ;  //write data to a file where you want to place
    }
        else {
            System.out.format("input field name: %s, value:%s%n", e.getFieldName(), e.getString());
        }
-  }
+}
+&lt;/code&gt;

-
- In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,
- all data parts split by boundary are parsed an put into a list.
- {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart
- data whether is a uploading file or normal input. For example, in a form HTML
- code is
- &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding
+ In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,  all data parts split by boundary are parsed an put into a list. {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart data whether is a uploading file or normal input. For example, in a form HTML
+code is. ie.
+ &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding 
  &lt;code&gt;MultiPart&lt;/code&gt; object is not a file, to a no-file type
- &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of
- it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
+ &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of  it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
   &lt;li&gt;&lt;code&gt;&amp;lt;input type="file" /&amp;gt;&lt;/code&gt;, regarding
  &lt;code&gt;MultiPart&lt;/code&gt; object is a file, to a file type
  &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload provides
  &lt;code&gt;toFile(String)&lt;/code&gt; method to write content of current multipart
- stream into a file. And &lt;code&gt;getInputStream()&lt;/code&gt; to open a inputream for
- current multipart stream. so APIs user can access it directly.&lt;/li&gt;
+ stream into a file. And &lt;code&gt;getInputStream()&lt;/code&gt; to open a inputream for  current multipart stream. so APIs user can access it directly.&lt;/li&gt;

- The second way is read 8K bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; to a
- buffer, then parse multipart data within two boundaries, create disk file for
- it and write content data in the temporary file when found a multipart data.
- read 8K bytes next until all byte of &lt;code&gt;ServletInputStream&lt;/code&gt; is read
- and parsed. Finally return a list of {@link MultiPart}. This way only need 8K
- buffer extra. It's very useful when receive a large size of file. Here are
- simple code snippet to show this usage way.
+ The second way is read 8K bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; to a  buffer, then parse multipart data within two boundaries, create disk file for  it and write content data in the temporary file when found a multipart data. read 8K bytes next until all byte of &lt;code&gt;ServletInputStream&lt;/code&gt; is read and parsed. Finally return a list of {@link MultiPart}. This way only need 8K buffer extra. It's very useful when receive a large size of file. Here are simple code snippet to show this usage way.

- 
+ &lt;code&gt;
  FileFactory fileFactory = FileFactory.getInstance();
  fileFactory.setRepository(System.getProperty("user.home")+"/fastupload");
  FastUploadParser fastUploadParser = new FastUploadParser(request, fileFactory);
@@ -79,11 +60,10 @@
    else {
        System.out.format("input field name: %s, value:%s%n", e.getFieldName(), e.getString());
    }
-  }
-  
+ }
+&lt;/code&gt;  

- As you see, most code is like the first way, the code snippet change the
- parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object
+ As you see, most code is like the first way, the code snippet change the parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object

  &lt;code&gt;
@@ -92,17 +72,12 @@
  &lt;/code&gt;

- &lt;code&gt;e.toFile( /target/ )&lt;/code&gt; move the temporary file to the target place
- where you want because it isn't as same as first way that store multipart
- data in memory.
+ &lt;code&gt;e.toFile( /target/ )&lt;/code&gt; move the temporary file to the target place where you want because it isn't as same as first way that store multipart data in memory.

 ##Advanced APIs##
  {@link FileFactory} controls parse way, give some advanced features as well.
  &lt;li&gt;&lt;code&gt;FileFactory fileFactory = FileFactory.getInstance("UTF-8");&lt;/code&gt;&lt;/li&gt;
- create a {@link FileFactory} instance with specific charset name. Content of
- a multipart will convert with the charset name when find the content type is
- text. Another thing is it converts the file name of content header with the
- charset when find it. It is a key feature of Fastupload open-source project.
+ create a {@link FileFactory} instance with specific charset name. Content of a multipart will convert with the charset name when find the content type is text. Another thing is it converts the file name of content header with the charset when find it. It is a key feature of Fastupload open-source project.

   &lt;li&gt;&lt;code&gt;
  FileFactory fileFactory = FileFactory.getInstance("UTF-8");
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Fri, 04 Jan 2013 12:32:08 -0000</pubDate><guid>https://sourceforge.netbc5ae6e5e74bd8a13d4dd9af482e28be3be96725</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v12
+++ v13
@@ -115,7 +115,11 @@

  &lt;li&gt;&lt;code&gt;fileFactory.setThreshold(200000);&lt;/code&gt; limit parse content length of a part excludes headers, does not exceed the threshold. throw a runtime type of {@link ThresholdException} 
  &lt;li&gt;&lt;code&gt;fileFactory.setMaxContentLength(2000000);&lt;/code&gt; limit parse a content length of current multipart request, does not exceed the value. throw a runtime type of {@link ThresholdException}
- 
+
+&lt;li&gt;Setup a {@link ProgressListener} to know  parsing progress &lt;/li&gt;
+&lt;code&gt;ProgressListener listener = new ProgressListener(fastUploadParser);
+listener.progress();
+&lt;/code&gt; 

 ##Maven Coordinate##
 you can add the dependency to your POM.xml, such that Maven resolve dependency automatically.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Fri, 04 Jan 2013 12:27:30 -0000</pubDate><guid>https://sourceforge.net94993945f9051229ad510da74806f09961dd3296</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v11
+++ v12
@@ -11,80 +11,111 @@
 * faster performance, low memory occupy and high stability
 * support struts2

-##Basic API##
-The first usage is parsing data in memory. The usage has high performance. We recommend it.
-
-MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory();
-HttpMemoryUploadParser httpMemoryUploadParser = new HttpMemoryUploadParser(request, mpdf);
-List&amp;lt;MultiPartFile&amp;gt; list = httpMemoryUploadParser.parseList();
-for (MultiPartFile e : list) {
-    if (e.isFile()) {
-        e.toFile(System.getProperty("user.home" + "/" + e.getFileName());
-    } else {
-        if (e.getBytes() &gt; 0)
-            System.out.println(new String(e.getContentBuffer()));
-    }
-}
+Refer to &lt;a href="http://www.ietf.org/rfc/rfc1867.txt"&gt;RFC1867&lt;/a&gt;, High
+level API for multipart/form-data &lt;code&gt;ServletInputStream&lt;/code&gt; parsing.
+Sometime web site need to receives large size of uploading file, sometime web
+site need to receives a plenty of small size of uploading file in the high
+throughput. Fastupload provides two way to parse
+&lt;code&gt;ServletInputStream&lt;/code&gt; and very simple APIs for variant requirements
+from high performance web site.

-The second usage is parsing data in buffer and save data into a disk file. The usage is lower performance than the first usage. But it has lower memory cost.
+##Basic Usage##
+ 
+The first way is read all bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; into a
+buffer, then parse multipart data within two boundaries.
+&lt;code&gt;FastUploadParser&lt;/code&gt; parse multipart/form-data input stream with the
+way in default. we recommend it. Here are a sample code snippet.
+ 

-DiskFileFactory dff = new DiskFileFactory(System.getProperty("user.home"));
-HttpFileUploadParser parser = new HttpFileUploadParser(req, dff);
-List&amp;lt;MultiPartFile&amp;gt; files = parser.parse();
+  FastUploadParser fastUploadParser = new FastUploadParser(request);
+ List&amp;lt;MultiPart&amp;gt; list = fastUploadParser.parseList();
+ for (MultiPart e: list){
+   if (e.isFile()){
+       System.out.format("input field name: %s, file name:%s%n", e.getFieldName(), e.getFileName());
+           e.toFile( /file/ ) ;  //write data to a file where you want to place
+   }
+       else {
+           System.out.format("input field name: %s, value:%s%n", e.getFieldName(), e.getString());
+       }
+  }

-##Advanced API##
-optional  *DiskFileFactory* and *MultiPartDataFactory* provide a several features. specify a charset,

-DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;);
-or
-MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory(&amp;quot;utf-8&amp;quot;);
+ In the code snippet, after &lt;code&gt;fastUploadParser.parseList()&lt;/code&gt; execute,
+ all data parts split by boundary are parsed an put into a list.
+ {@link MultiPart} provides &lt;code&gt;isFile()&lt;/code&gt; method determine a multipart
+ data whether is a uploading file or normal input. For example, in a form HTML
+ code is
+ &lt;li&gt;&lt;code&gt;&amp;lt;input type="text" /&amp;gt;&lt;/code&gt;, regarding
+ &lt;code&gt;MultiPart&lt;/code&gt; object is not a file, to a no-file type
+ &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload limits to provides get content of
+ it as &lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;code&gt;&amp;lt;input type="file" /&amp;gt;&lt;/code&gt;, regarding
+ &lt;code&gt;MultiPart&lt;/code&gt; object is a file, to a file type
+ &lt;code&gt;MultiPart&lt;/code&gt; object, Fastupload provides
+ &lt;code&gt;toFile(String)&lt;/code&gt; method to write content of current multipart
+ stream into a file. And &lt;code&gt;getInputStream()&lt;/code&gt; to open a inputream for
+ current multipart stream. so APIs user can access it directly.&lt;/li&gt;
+ 
+ The second way is read 8K bytes from &lt;code&gt;ServletInputStream&lt;/code&gt; to a
+ buffer, then parse multipart data within two boundaries, create disk file for
+ it and write content data in the temporary file when found a multipart data.
+ read 8K bytes next until all byte of &lt;code&gt;ServletInputStream&lt;/code&gt; is read
+ and parsed. Finally return a list of {@link MultiPart}. This way only need 8K
+ buffer extra. It's very useful when receive a large size of file. Here are
+ simple code snippet to show this usage way.
+ 
+ 
+ FileFactory fileFactory = FileFactory.getInstance();
+ fileFactory.setRepository(System.getProperty("user.home")+"/fastupload");
+ FastUploadParser fastUploadParser = new FastUploadParser(request, fileFactory);
+ List&amp;lt;MultiPart&amp;gt; list = fastUploadParser.parseList();
+ for (MultiPart e: list){
+   if (e.isFile()){
+       System.out.format("input field name: %s, file name:%s%n", e.getFieldName(), e.getFileName());
+       e.toFile( /target/ ) ;  //move temporary file to where you want to place
+   }
+   else {
+       System.out.format("input field name: %s, value:%s%n", e.getFieldName(), e.getString());
+   }
+  }
+  

+ As you see, most code is like the first way, the code snippet change the
+ parse way. It set a temporary repository for &lt;code&gt;FileFactory&lt;/code&gt; object

-*HttpFileUploadParser* converts file name with utf-8 charset, also
-convert the content with utf-8 charset if found the form-based uploading file
-is text format. In memory appropriate, *MultiPartFile* object export all bytes to user. so it doesn't convert data CharSet. 

-
-DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;, 0x20000);
-or 
-
-MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory(&amp;quot;utf-8&amp;quot;, 0x20000);
-
-the code indicates the max size is 0x20000 per file.
-
-dff.setParseThreshold(0x100000);
-
-The code indicates the max content-length of whole requesting data.
-
-Fastupload provides an advanced mechanism that filters uploading files. It
-does not like others form-based uploading component or framework filter
-feature. It filters off a boundary if found the boundary's content header
-doesn't match the rules.
-
-dff.setAllowedExtensions(&amp;quot;.jpg, .png&amp;quot;);
-
-
-comma splitting. the code indicates *HttpFileUploadParser* accept two
-types file. JPG and PNG.
+ &lt;code&gt;
+ FileFactory fileFactory = FileFactory.getInstance();
+ fileFactory.setRepository(System.getProperty("user.home")+"/fastupload");
+ &lt;/code&gt;

-dff.setAllowedTypes(&amp;quot;image/jpg&amp;quot;);
-
-
-the code indicates *HttpFileUploadParser* accept the &lt;em&gt;image/jpg&lt;/em&gt;
-content type.
-when *HttpFileUploadParser* filters off some boundaries, it put headers into a exceptional collection as digest information. user can get it with the API.
-
-Set&amp;lt;ContentHeaderMap&amp;gt; exceptionals = dff.getExceptionals()
-
-
-At the point, you may know *MemoryMultiPartDataFactory* has the same methods. indeed, it has.
-mpdf.setParseThreshold(0x100000);
-mpdf.setAllowedExtensions(&amp;quot;.jpg, .png&amp;quot;);
-mpdf.setAllowedTypes(&amp;quot;image/jpg&amp;quot;);
-Set&amp;lt;ContentHeaderMap&amp;gt; exceptionals = mpdf.getExceptionals()
-
+ 
+ &lt;code&gt;e.toFile( /target/ )&lt;/code&gt; move the temporary file to the target place
+ where you want because it isn't as same as first way that store multipart
+ data in memory.
+ 
+##Advanced APIs##
+ {@link FileFactory} controls parse way, give some advanced features as well.
+ &lt;li&gt;&lt;code&gt;FileFactory fileFactory = FileFactory.getInstance("UTF-8");&lt;/code&gt;&lt;/li&gt;
+ create a {@link FileFactory} instance with specific charset name. Content of
+ a multipart will convert with the charset name when find the content type is
+ text. Another thing is it converts the file name of content header with the
+ charset when find it. It is a key feature of Fastupload open-source project.
+ 
+  &lt;li&gt;&lt;code&gt;
+ FileFactory fileFactory = FileFactory.getInstance("UTF-8");
+ fileFactory.setAllowedTypes("image/jpeg");
+ fileFactory.setAllowedExtensions(".jpg, .png");
+ &lt;/code&gt;&lt;/li&gt; &lt;code&gt;FastUploadParser&lt;/code&gt; provides content type and file
+ name filter function. Parser ignore a multipart content when found its
+ content header does not match &lt;em&gt;AllowedTypes&lt;/em&gt; or extension name of
+ &lt;em&gt;filename&lt;/em&gt; entity does not match &lt;em&gt;AllowedExtensions&lt;/em&gt;.
+  
+ &lt;li&gt;&lt;code&gt;fileFactory.setThreshold(200000);&lt;/code&gt; limit parse content length of a part excludes headers, does not exceed the threshold. throw a runtime type of {@link ThresholdException} 
+ &lt;li&gt;&lt;code&gt;fileFactory.setMaxContentLength(2000000);&lt;/code&gt; limit parse a content length of current multipart request, does not exceed the value. throw a runtime type of {@link ThresholdException}
+ 

 ##Maven Coordinate##
 you can add the dependency to your POM.xml, such that Maven resolve dependency automatically.
@@ -92,5 +123,5 @@
 &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;net.sf.fastupload&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;fastupload-core&amp;lt;/artifactId&amp;gt;
-    &amp;lt;version&amp;gt;0.4.7&amp;lt;/version&amp;gt;
+    &amp;lt;version&amp;gt;0.5.3&amp;lt;/version&amp;gt;
 &amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Sat, 29 Dec 2012 13:37:32 -0000</pubDate><guid>https://sourceforge.net7e64f68436d3c89eafa87059b608aee59c3b868d</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;pre&gt;--- v10
+++ v11
@@ -13,7 +13,7 @@
 
 ##Basic API##
 The first usage is parsing data in memory. The usage has high performance. We recommend it.
-&lt;pre&gt;
+
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory();
 HttpMemoryUploadParser httpMemoryUploadParser = new HttpMemoryUploadParser(request, mpdf);
 List&amp;lt;MultiPartFile&amp;gt; list = httpMemoryUploadParser.parseList();
@@ -25,37 +25,37 @@
             System.out.println(new String(e.getContentBuffer()));
     }
 }
-&lt;/pre&gt;
+
 
 The second usage is parsing data in buffer and save data into a disk file. The usage is lower performance than the first usage. But it has lower memory cost.
-&lt;pre&gt;
+
 DiskFileFactory dff = new DiskFileFactory(System.getProperty("user.home"));
 HttpFileUploadParser parser = new HttpFileUploadParser(req, dff);
 List&amp;lt;MultiPartFile&amp;gt; files = parser.parse();
-&lt;/pre&gt;
+
 
 ##Advanced API##
 optional  *DiskFileFactory* and *MultiPartDataFactory* provide a several features. specify a charset,
-&lt;pre&gt;
-DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;);&lt;/pre&gt;or&lt;pre&gt;
+
+DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;);
+or
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory(&amp;quot;utf-8&amp;quot;);
-&lt;/pre&gt;
+
  
 *HttpFileUploadParser* converts file name with utf-8 charset, also
 convert the content with utf-8 charset if found the form-based uploading file
 is text format. In memory appropriate, *MultiPartFile* object export all bytes to user. so it doesn't convert data CharSet. 
  
-&lt;pre&gt;
-DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;, 0x20000);&lt;/pre&gt;
+
+DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;, 0x20000);
 or 
-&lt;pre&gt;
+
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory(&amp;quot;utf-8&amp;quot;, 0x20000);
-&lt;/pre&gt;
+
 the code indicates the max size is 0x20000 per file.
 
-&lt;pre&gt;
 dff.setParseThreshold(0x100000);
-&lt;/pre&gt;
+
 The code indicates the max content-length of whole requesting data.
 
 Fastupload provides an advanced mechanism that filters uploading files. It
@@ -63,37 +63,34 @@
 feature. It filters off a boundary if found the boundary's content header
 doesn't match the rules.
 
-&lt;pre&gt;
 dff.setAllowedExtensions(&amp;quot;.jpg, .png&amp;quot;);
-&lt;/pre&gt;
+
 
 comma splitting. the code indicates *HttpFileUploadParser* accept two
 types file. JPG and PNG.
  
-&lt;pre&gt;
 dff.setAllowedTypes(&amp;quot;image/jpg&amp;quot;);
-&lt;/pre&gt;
+
 
 the code indicates *HttpFileUploadParser* accept the &lt;em&gt;image/jpg&lt;/em&gt;
 content type.
 when *HttpFileUploadParser* filters off some boundaries, it put headers into a exceptional collection as digest information. user can get it with the API.
-&lt;pre&gt;
+
 Set&amp;lt;ContentHeaderMap&amp;gt; exceptionals = dff.getExceptionals()
-&lt;/pre&gt;
+
 
 At the point, you may know *MemoryMultiPartDataFactory* has the same methods. indeed, it has.
-&lt;pre&gt;mpdf.setParseThreshold(0x100000);
+mpdf.setParseThreshold(0x100000);
 mpdf.setAllowedExtensions(&amp;quot;.jpg, .png&amp;quot;);
 mpdf.setAllowedTypes(&amp;quot;image/jpg&amp;quot;);
 Set&amp;lt;ContentHeaderMap&amp;gt; exceptionals = mpdf.getExceptionals()
-&lt;/pre&gt;
+
 
 ##Maven Coordinate##
 you can add the dependency to your POM.xml, such that Maven resolve dependency automatically.
-&lt;pre&gt;
+
 &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;net.sf.fastupload&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;fastupload-core&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;0.4.7&amp;lt;/version&amp;gt;
 &amp;lt;/dependency&amp;gt;
-&lt;/pre&gt;
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Fri, 30 Nov 2012 13:45:04 -0000</pubDate><guid>https://sourceforge.net3e113fbe44772a6f86a06775ed7f65e03d215aa7</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;pre&gt;--- v9
+++ v10
@@ -11,7 +11,7 @@
 * faster performance, low memory occupy and high stability
 * support struts2
 
-##basic API##
+##Basic API##
 The first usage is parsing data in memory. The usage has high performance. We recommend it.
 &lt;pre&gt;
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory();
@@ -87,3 +87,13 @@
 mpdf.setAllowedTypes(&amp;quot;image/jpg&amp;quot;);
 Set&amp;lt;ContentHeaderMap&amp;gt; exceptionals = mpdf.getExceptionals()
 &lt;/pre&gt;
+
+##Maven Coordinate##
+you can add the dependency to your POM.xml, such that Maven resolve dependency automatically.
+&lt;pre&gt;
+&amp;lt;dependency&amp;gt;
+    &amp;lt;groupId&amp;gt;net.sf.fastupload&amp;lt;/groupId&amp;gt;
+    &amp;lt;artifactId&amp;gt;fastupload-core&amp;lt;/artifactId&amp;gt;
+    &amp;lt;version&amp;gt;0.4.7&amp;lt;/version&amp;gt;
+&amp;lt;/dependency&amp;gt;
+&lt;/pre&gt;
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Thu, 29 Nov 2012 02:13:29 -0000</pubDate><guid>https://sourceforge.net03fa8be139b677b15b21fb09a7497c109b3722e9</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;pre&gt;--- v8
+++ v9
@@ -11,7 +11,7 @@
 * faster performance, low memory occupy and high stability
 * support struts2
 
-##API basic usage##
+##basic API##
 The first usage is parsing data in memory. The usage has high performance. We recommend it.
 &lt;pre&gt;
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory();
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Tue, 13 Nov 2012 08:56:33 -0000</pubDate><guid>https://sourceforge.net2e6fd3ed2236d94fa44aead707a7a056aab161e6</guid></item><item><title>WikiPage Fastupload Home modified by Link Qian</title><link>https://sourceforge.net/p/fastupload/wiki/Fastupload%2520Home/</link><description>&lt;pre&gt;--- v7
+++ v8
@@ -37,7 +37,7 @@
 ##Advanced API##
 optional  *DiskFileFactory* and *MultiPartDataFactory* provide a several features. specify a charset,
 &lt;pre&gt;
-DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;);&lt;/pre&gt; or &lt;pre&gt;
+DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;);&lt;/pre&gt;or&lt;pre&gt;
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory(&amp;quot;utf-8&amp;quot;);
 &lt;/pre&gt;
  
@@ -46,7 +46,9 @@
 is text format. In memory appropriate, *MultiPartFile* object export all bytes to user. so it doesn't convert data CharSet. 
  
 &lt;pre&gt;
-DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;, 0x20000);&lt;/pre&gt; or &lt;pre&gt;
+DiskFileFactory dff = new DiskFileFactory(System.getProperty(&amp;quot;user.home&amp;quot;), &amp;quot;utf-8&amp;quot;, 0x20000);&lt;/pre&gt;
+or 
+&lt;pre&gt;
 MultiPartDataFactory mpdf = new MemoryMultiPartDataFactory(&amp;quot;utf-8&amp;quot;, 0x20000);
 &lt;/pre&gt;
 the code indicates the max size is 0x20000 per file.
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Link Qian</dc:creator><pubDate>Tue, 13 Nov 2012 08:50:10 -0000</pubDate><guid>https://sourceforge.netb0347f114e4951c4c448bd94b6aded1f56c959e1</guid></item></channel></rss>