<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.nginx.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;feed=atom&amp;action=history</id>
		<title>HttpUploadProgressModule - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;action=history"/>
		<updated>2013-05-23T21:16:37Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.0</generator>

	<entry>
		<id>http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=2860&amp;oldid=prev</id>
		<title>Misiek: version 0.9.0 and info about it</title>
		<link rel="alternate" type="text/html" href="http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=2860&amp;oldid=prev"/>
				<updated>2012-11-05T19:31:56Z</updated>
		
		<summary type="html">&lt;p&gt;version 0.9.0 and info about it&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:31, 5 November 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Download version''': [https://github.com/masterzen/nginx-upload-progress-module/tarball/v0.8.4 v0.8.4] &amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Download version''': [https://github.com/masterzen/nginx-upload-progress-module/tarball/v0.8.4 v0.8.4] &amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'''Download version''': [https://github.com/masterzen/nginx-upload-progress-module/tarball/v0.9.0 v0.9.0] &amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'''WARNING''' - in version 0.9.0 there is '''INCOMPATIBLE CHANGE''':&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;JSONP is now the default output of the progress probes. If you rely on this module serving the deprecated java output use:&amp;lt;pre&amp;gt;upload_progress_java_output&amp;lt;/pre&amp;gt;in the progress probe location.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Installation = &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Installation = &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Misiek</name></author>	</entry>

	<entry>
		<id>http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=2859&amp;oldid=prev</id>
		<title>Misiek: Design changes.</title>
		<link rel="alternate" type="text/html" href="http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=2859&amp;oldid=prev"/>
				<updated>2012-11-05T19:25:48Z</updated>
		
		<summary type="html">&lt;p&gt;Design changes.&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:25, 5 November 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The JSON and mechanism idea are based on [http://blog.lighttpd.net/articles/2006/08/01/mod_uploadprogress-is-back Lighttpd's mod_uploadprogress]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The JSON and mechanism idea are based on [http://blog.lighttpd.net/articles/2006/08/01/mod_uploadprogress-is-back Lighttpd's mod_uploadprogress]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Downloads &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Downloads =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Download version''': [https://github.com/masterzen/nginx-upload-progress-module/tarball/v0.8.4 v0.8.4] &amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Download version''': [https://github.com/masterzen/nginx-upload-progress-module/tarball/v0.8.4 v0.8.4] &amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Installation &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Installation = &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;After extracting, add the following option to your Nginx ./configure command:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;After extracting, add the following option to your Nginx ./configure command:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 30:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 30:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When compiled with --with-debug, this module will produce high number of log messages.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When compiled with --with-debug, this module will produce high number of log messages.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Directives &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Directives =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [[#upload_progress|upload_progress]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [[#upload_progress|upload_progress]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [[#track_uploads|track_uploads]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [[#track_uploads|track_uploads]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 180:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 180:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Configuration Example &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Configuration Example =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 211:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 211:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Usage on pure JavaScript &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Usage on pure JavaScript =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(based on Lighttd mod_uploadprogress module example):&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(based on Lighttd mod_uploadprogress module example):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 289:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 289:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Usage with jQuery Upload Progress &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Usage with jQuery Upload Progress =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You can use jQuery plugin to work with Nginx upload-progress-module - https://github.com/drogus/jquery-upload-progress&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You can use jQuery plugin to work with Nginx upload-progress-module - https://github.com/drogus/jquery-upload-progress&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 393:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 393:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* ''dataType:'' 'json'&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* ''dataType:'' 'json'&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;= Companion Software &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Companion Software =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This software can also work with Valery Kholodkov' Nginx Upload Module:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This software can also work with Valery Kholodkov' Nginx Upload Module:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Misiek</name></author>	</entry>

	<entry>
		<id>http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=1665&amp;oldid=prev</id>
		<title>Ensiferous: /* Nginx Upload Progress Module */  Version update</title>
		<link rel="alternate" type="text/html" href="http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=1665&amp;oldid=prev"/>
				<updated>2012-03-10T16:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Nginx Upload Progress Module: &lt;/span&gt;  Version update&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:44, 10 March 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Downloads ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Downloads ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Download version''': [&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;http&lt;/del&gt;://github.com/masterzen/nginx-upload-progress-module/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;archives&lt;/del&gt;/v0.8.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2 &lt;/del&gt;v0.8.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2&lt;/del&gt;] &amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Download version''': [&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;https&lt;/ins&gt;://github.com/masterzen/nginx-upload-progress-module/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;tarball&lt;/ins&gt;/v0.8.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;4 &lt;/ins&gt;v0.8.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;4&lt;/ins&gt;] &amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ensiferous</name></author>	</entry>

	<entry>
		<id>http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=204&amp;oldid=prev</id>
		<title>MarkRose at 23:53, 13 December 2011</title>
		<link rel="alternate" type="text/html" href="http://wiki.nginx.org/index.php?title=HttpUploadProgressModule&amp;diff=204&amp;oldid=prev"/>
				<updated>2011-12-13T23:53:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Nginx Upload Progress Module =&lt;br /&gt;
&lt;br /&gt;
''Note: this module is not distributed with the Nginx source.''&lt;br /&gt;
&lt;br /&gt;
nginx_uploadprogress_module is an implementation of an upload progress system, that monitors&lt;br /&gt;
RFC1867 POST upload as they are transmitted to upstream servers.&lt;br /&gt;
&lt;br /&gt;
It works by tracking the uploads proxied by Nginx to upstream servers without &lt;br /&gt;
analysing the uploaded content and offers a web API to report upload progress in Javascript, JSON or configurable format.&lt;br /&gt;
It works because Nginx acts as an accelerator of an upstream server, storing uploaded POST content&lt;br /&gt;
on disk, before transmitting it to the upstream server. Each individual POST upload request&lt;br /&gt;
should contain a progress unique identifier.&lt;br /&gt;
&lt;br /&gt;
The JSON and mechanism idea are based on [http://blog.lighttpd.net/articles/2006/08/01/mod_uploadprogress-is-back Lighttpd's mod_uploadprogress]&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
'''Download version''': [http://github.com/masterzen/nginx-upload-progress-module/archives/v0.8.2 v0.8.2] &amp;lt;br&amp;gt;&lt;br /&gt;
'''Source code''': http://github.com/masterzen/nginx-upload-progress-module/tree/master&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
After extracting, add the following option to your Nginx ./configure command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  --add-module=path/to/nginx_uploadprogress_module&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WARNING''':&lt;br /&gt;
When compiled with --with-debug, this module will produce high number of log messages.&lt;br /&gt;
&lt;br /&gt;
== Directives ==&lt;br /&gt;
* [[#upload_progress|upload_progress]]&lt;br /&gt;
* [[#track_uploads|track_uploads]]&lt;br /&gt;
* [[#report_uploads|report_uploads]]&lt;br /&gt;
* [[#upload_progress_content_type|upload_progress_content_type]]&lt;br /&gt;
* [[#upload_progress_header|upload_progress_header]]&lt;br /&gt;
* [[#upload_progress_jsonp_parameter|upload_progress_jsonp_parameter]]&lt;br /&gt;
* [[#upload_progress_json_output|upload_progress_json_output]]&lt;br /&gt;
* [[#upload_progress_jsonp_output|upload_progress_jsonp_output]]&lt;br /&gt;
* [[#upload_progress_template|upload_progress_template]]&lt;br /&gt;
&lt;br /&gt;
== upload_progress ==&lt;br /&gt;
'''syntax:''' ''upload_progress &amp;lt;zone_name&amp;gt; &amp;lt;zone_size&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''n/a''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''http''&lt;br /&gt;
&lt;br /&gt;
This directive enables the upload progress module and reserve ''zone_size'' bytes to the ''zone_name'' which will be used to store the per-connection tracking information.&lt;br /&gt;
&lt;br /&gt;
== track_uploads ==&lt;br /&gt;
'''syntax:''' ''track_uploads &amp;lt;zone_name&amp;gt; &amp;lt;timeout&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''n/a''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive enables tracking uploads for the current location. Each POST landing in this location will register the request in the ''zone_name'' upload progress tracker.&lt;br /&gt;
Since Nginx doesn't support yet RFC 1867 upload, the location must be a proxy_pass or fastcgi location.&lt;br /&gt;
The POST ''must'' have a query parameter called ''X-Progress-ID'' (or an HTTP header of the same name) whose value is the unique identifier used to get progress information. If the POST has no such information, the upload will not be tracked.&lt;br /&gt;
The tracked connections are kept at most ''timeout'' seconds after they have been finished to be able to serve unseful information to upload progress probes.&lt;br /&gt;
'''WARNING''': this directive must be the last directive of the location. It must be in a proxy_pass or fastcgi_pass location. Repeating the directive in a location will results in segfaults.&lt;br /&gt;
&lt;br /&gt;
== report_uploads ==&lt;br /&gt;
'''syntax:''' ''report_uploads &amp;lt;zone_name&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''n/a''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive allows a location to report the upload progress that is tracked by track_uploads for ''zone_name''.&lt;br /&gt;
The returned document is a Javascript text with the possible 4 results by default:&lt;br /&gt;
* the upload request hasn't been registered yet or is unknown:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
new Object({ 'state' : 'starting' })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* the upload request has ended:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
new Object({ 'state' : 'done' })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* the upload request generated an HTTP error&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
new Object({ 'state' : 'error', 'status' : &amp;lt;error code&amp;gt; })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
One error code that can be of use to track for the client is 413 (request entity too large).&lt;br /&gt;
* the upload request is in progress:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
new Object({ 'state' : 'uploading', 'received' : &amp;lt;size_received&amp;gt;, 'size' : &amp;lt;total_size&amp;gt;})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is possible to return pure json instead of this javascript (see upload_progress_json_output).&lt;br /&gt;
It is also possible to configure completely the response format with the directive: ''upload_progress_template''&lt;br /&gt;
&lt;br /&gt;
The HTTP request to this location must have a ''X-Progress-ID'' parameter or HTTP header containing a valid unique identifier of an inprogress upload.&lt;br /&gt;
&lt;br /&gt;
== upload_progress_content_type ==&lt;br /&gt;
'''syntax:''' ''upload_progress_content_type &amp;lt;content_type&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''test/javascript''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive allows to change the upload progress probe response content-type.&lt;br /&gt;
&lt;br /&gt;
== upload_progress_header ==&lt;br /&gt;
'''syntax:''' ''upload_progress_header &amp;lt;progress-id&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''X-Progress-ID''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive allows to change the header name of the progress ID.&lt;br /&gt;
&lt;br /&gt;
== upload_progress_jsonp_parameter ==&lt;br /&gt;
'''syntax:''' ''upload_progress_jsonp_parameter &amp;lt;callback_parameter&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''callback''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive allows to change the name of the GET parameter with the jsonp callback name.&lt;br /&gt;
&lt;br /&gt;
== upload_progress_json_output ==&lt;br /&gt;
'''syntax:''' ''upload_progress_json_output''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''n/a''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''main,sever,location''&lt;br /&gt;
&lt;br /&gt;
This directive sets everything to output as pure json.&lt;br /&gt;
&lt;br /&gt;
== upload_progress_jsonp_output ==&lt;br /&gt;
'''syntax:''' ''upload_progress_jsonp_output''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''none''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive sets everything to output as jsonp (like json output, but with callback).&lt;br /&gt;
&lt;br /&gt;
== upload_progress_template ==&lt;br /&gt;
'''syntax:''' ''upload_progress_template &amp;lt;state&amp;gt; &amp;lt;template&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''default:''' ''n/a''&lt;br /&gt;
&lt;br /&gt;
'''context:''' ''location''&lt;br /&gt;
&lt;br /&gt;
This directive can be used to install a progress response template. The available list of state is:&lt;br /&gt;
* ''starting''&lt;br /&gt;
* ''uploading''&lt;br /&gt;
* ''error''&lt;br /&gt;
* ''done''&lt;br /&gt;
&lt;br /&gt;
Nginx will replace the value of the following variables with their respective value for the upload:&lt;br /&gt;
* ''$uploadprogress_length:'' total size of the upload&lt;br /&gt;
* ''$uploadprogress_received:'' what the server has received so far&lt;br /&gt;
* ''$uploadprogress_status:'' error code in case of HTTP error&lt;br /&gt;
* ''$uploadprogress_callback:'' jsonp callback name if provided as a GET query parameter with name '''callback'''&lt;br /&gt;
&lt;br /&gt;
For instance to return XML (instead of the default Javascript or json):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_progress_content_type 'text/xml';&lt;br /&gt;
upload_progress_template starting '&amp;lt;upload&amp;gt;&amp;lt;state&amp;gt;starting&amp;lt;/state&amp;gt;&amp;lt;/upload&amp;gt;';&lt;br /&gt;
upload_progress_template uploading '&amp;lt;upload&amp;gt;&amp;lt;state&amp;gt;uploading&amp;lt;/state&amp;gt;&lt;br /&gt;
&amp;lt;size&amp;gt;$uploadprogress_length&amp;lt;/size&amp;gt;&amp;lt;uploaded&amp;gt;$uploadprogress_received&amp;lt;/uploaded&amp;gt;&amp;lt;/upload&amp;gt;';&lt;br /&gt;
upload_progress_template done '&amp;lt;upload&amp;gt;&amp;lt;state&amp;gt;done&amp;lt;/state&amp;gt;&amp;lt;/upload&amp;gt;';&lt;br /&gt;
upload_progress_template error '&amp;lt;upload&amp;gt;&amp;lt;state&amp;gt;error&amp;lt;/state&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$uploadprogress_status&amp;lt;/code&amp;gt;&amp;lt;/upload&amp;gt;';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of jsonp response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_progress_template starting &amp;quot;$uploadprogress_callback({ 'state' : 'starting'});&amp;quot;;&lt;br /&gt;
upload_progress_template error &amp;quot;$uploadprogress_callback({ 'state' : 'error',&lt;br /&gt;
'status' : $uploadprogress_status });&amp;quot;;&lt;br /&gt;
upload_progress_template done &amp;quot;$uploadprogress_callback({ 'state' : 'done'});&amp;quot;;&lt;br /&gt;
upload_progress_template uploading &amp;quot;$uploadprogress_callback({ 'state' : 'uploading',&lt;br /&gt;
'received' : $uploadprogress_received, 'size' : $uploadprogress_length });&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http {&lt;br /&gt;
    # reserve 1MB under the name 'proxied' to track uploads&lt;br /&gt;
    upload_progress proxied 1m;&lt;br /&gt;
&lt;br /&gt;
    server {&lt;br /&gt;
        listen       127.0.0.1 default;&lt;br /&gt;
        server_name  localhost;&lt;br /&gt;
&lt;br /&gt;
        root /path/to/root;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
            # proxy to upstream server&lt;br /&gt;
            proxy_pass http://127.0.0.1;&lt;br /&gt;
            proxy_redirect default;&lt;br /&gt;
            &lt;br /&gt;
            # track uploads in the 'proxied' zone&lt;br /&gt;
            # remember connections for 30s after they finished&lt;br /&gt;
            track_uploads proxied 30s;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        location ^~ /progress {&lt;br /&gt;
            # report uploads tracked in the 'proxied' zone&lt;br /&gt;
            report_uploads proxied;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage on pure JavaScript ==&lt;br /&gt;
&lt;br /&gt;
(based on Lighttd mod_uploadprogress module example):&lt;br /&gt;
&lt;br /&gt;
First we need a upload form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;upload&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
action=&amp;quot;/upload.php&amp;quot; method=&amp;quot;post&amp;quot; onsubmit=&amp;quot;openProgressBar(); return true;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000000&amp;quot;  /&amp;gt;&lt;br /&gt;
  &amp;lt;input name=&amp;quot;userfile&amp;quot; type=&amp;quot;file&amp;quot; label=&amp;quot;fileupload&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Send File&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And a progress bar to visualize the progress:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;progress&amp;quot; style=&amp;quot;width: 400px; border: 1px solid black&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;progressbar&amp;quot; style=&amp;quot;width: 1px; background-color: black; border: 1px solid white&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;tp&amp;quot;&amp;gt;(progress)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then we need to generate the Unique Identifier and launch the upload on submit&lt;br /&gt;
action. This also will start the ajax progress report mechanism.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 interval = null;&lt;br /&gt;
&lt;br /&gt;
function openProgressBar() {&lt;br /&gt;
 /* generate random progress-id */&lt;br /&gt;
 uuid = &amp;quot;&amp;quot;;&lt;br /&gt;
 for (i = 0; i &amp;lt; 32; i++) {&lt;br /&gt;
  uuid += Math.floor(Math.random() * 16).toString(16);&lt;br /&gt;
 }&lt;br /&gt;
 /* patch the form-action tag to include the progress-id */&lt;br /&gt;
 document.getElementById(&amp;quot;upload&amp;quot;).action=&amp;quot;/upload.php?X-Progress-ID=&amp;quot; + uuid;&lt;br /&gt;
&lt;br /&gt;
 /* call the progress-updater every 1000ms */&lt;br /&gt;
 interval = window.setInterval(&lt;br /&gt;
   function () {&lt;br /&gt;
     fetch(uuid);&lt;br /&gt;
   },&lt;br /&gt;
   1000&lt;br /&gt;
 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fetch(uuid) {&lt;br /&gt;
 req = new XMLHttpRequest();&lt;br /&gt;
 req.open(&amp;quot;GET&amp;quot;, &amp;quot;/progress&amp;quot;, 1);&lt;br /&gt;
 req.setRequestHeader(&amp;quot;X-Progress-ID&amp;quot;, uuid);&lt;br /&gt;
 req.onreadystatechange = function () {&lt;br /&gt;
  if (req.readyState == 4) {&lt;br /&gt;
   if (req.status == 200) {&lt;br /&gt;
    /* poor-man JSON parser */&lt;br /&gt;
    var upload = eval(req.responseText);&lt;br /&gt;
&lt;br /&gt;
    document.getElementById('tp').innerHTML = upload.state;&lt;br /&gt;
&lt;br /&gt;
    /* change the width if the inner progress-bar */&lt;br /&gt;
    if (upload.state == 'done' || upload.state == 'uploading') {&lt;br /&gt;
     bar = document.getElementById('progressbar');&lt;br /&gt;
     w = 400 * upload.received / upload.size;&lt;br /&gt;
     bar.style.width = w + 'px';&lt;br /&gt;
    }&lt;br /&gt;
    /* we are done, stop the interval */&lt;br /&gt;
    if (upload.state == 'done') {&lt;br /&gt;
     window.clearTimeout(interval);&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 req.send(null);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage with jQuery Upload Progress ==&lt;br /&gt;
&lt;br /&gt;
You can use jQuery plugin to work with Nginx upload-progress-module - https://github.com/drogus/jquery-upload-progress&lt;br /&gt;
(based on it's documentation).&lt;br /&gt;
&lt;br /&gt;
Some html:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;upload&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.html&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input name=&amp;quot;file&amp;quot; type=&amp;quot;file&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;uploading&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;progress&amp;quot; class=&amp;quot;bar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;progressbar&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;percents&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then some css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.bar {&lt;br /&gt;
  width: 300px;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
#progress {&lt;br /&gt;
  background: #eee;&lt;br /&gt;
  border: 1px solid #222;&lt;br /&gt;
  margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#progressbar {&lt;br /&gt;
  width: 0px;&lt;br /&gt;
  height: 24px;&lt;br /&gt;
  background: #333;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And a bit of javascript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() {&lt;br /&gt;
  $('form').uploadProgress({&lt;br /&gt;
    /* scripts locations for safari */&lt;br /&gt;
    jqueryPath: &amp;quot;../lib/jquery.js&amp;quot;,&lt;br /&gt;
    uploadProgressPath: &amp;quot;../jquery.uploadProgress.js&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* function called each time bar is updated */&lt;br /&gt;
    uploading: function(upload) {$('#percents').html(upload.percents+'%');},&lt;br /&gt;
&lt;br /&gt;
    /* selector or element that will be updated */&lt;br /&gt;
    progressBar: &amp;quot;#progressbar&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* progress reports url */&lt;br /&gt;
    progressUrl: &amp;quot;/progress&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* how often will bar be updated */&lt;br /&gt;
    interval: 2000&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to update the progress bar from a different domain or subdomain (cross domain), like if your upload server is different from your normal web server, you can try the JSONP protocol, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() {&lt;br /&gt;
  $('form').uploadProgress({&lt;br /&gt;
    /* scripts locations for safari */&lt;br /&gt;
    jqueryPath: &amp;quot;../lib/jquery.js&amp;quot;,&lt;br /&gt;
    uploadProgressPath: &amp;quot;../jquery.uploadProgress.js&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* function called each time bar is updated */&lt;br /&gt;
    uploading: function(upload) {$('#percents').html(upload.percents+'%');},&lt;br /&gt;
&lt;br /&gt;
    /* selector or element that will be updated */&lt;br /&gt;
    progressBar: &amp;quot;#progressbar&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* progress reports url in a different domain or subdomain from caller */&lt;br /&gt;
    progressUrl: &amp;quot;uploads.somewhere.com/progress&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* how often will bar be updated */&lt;br /&gt;
    interval: 2000,&lt;br /&gt;
&lt;br /&gt;
    /* use json-p for cross-domain call */&lt;br /&gt;
    dataType: 'jsonp'&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defaults:&lt;br /&gt;
&lt;br /&gt;
* ''interval:'' 2000&lt;br /&gt;
* ''progressBar:'' &amp;quot;#progressbar&amp;quot;&lt;br /&gt;
* ''progressUrl:'' &amp;quot;/progress&amp;quot;&lt;br /&gt;
* ''start:'' function() {}&lt;br /&gt;
* ''uploading:'' function() {}&lt;br /&gt;
* ''complete:'' function() {}&lt;br /&gt;
* ''success:'' function() {}&lt;br /&gt;
* ''error:'' function() {}&lt;br /&gt;
* ''uploadProgressPath:'' '/javascripts/jquery.js'&lt;br /&gt;
* ''jqueryPath:'' '/javascripts/jquery.uploadProgress.js'&lt;br /&gt;
* ''dataType:'' 'json'&lt;br /&gt;
&lt;br /&gt;
== Companion Software ==&lt;br /&gt;
&lt;br /&gt;
This software can also work with Valery Kholodkov' Nginx Upload Module:&lt;br /&gt;
http://www.grid.net.ru/nginx/upload.en.html&lt;br /&gt;
&lt;br /&gt;
You can also use the following javascript libraries client side:&lt;br /&gt;
http://drogomir.com/blog/2008/6/30/upload-progress-script-with-safari-support&lt;/div&gt;</summary>
		<author><name>MarkRose</name></author>	</entry>

	</feed>