simple module question

Valery Kholodkov valery+nginxen at
Sat Jul 12 02:33:43 MSD 2008

Manlio Perillo wrote:
> Valery Kholodkov ha scritto:
>> Hi!
>> In my patch for processing uploads you can find an API to process 
>> multipart/form-data bodies:
>> What you need are files upload.c and upload.h.
> Thanks!
>> I'm actually working now on the next version of this module which will 
>> be able to cut out and store uploaded files in temporal directory and 
>> proxy the remaining part of the body to a backend with brief 
>> information about files uploaded.
> My idea is to:
> 1) Modify the content-type from multipart/form-data to
>    application/x-www-form-urlencoded
> 2) Any non file parts are urlencoded and written to the new body
> 3) Files are written to temporary files, and in the new body is written:
>    name.filename=filename&name.path=path&name.content-type=content-type
>    where name is the field name and path is the temporary path used to
>    store the file.
> With this method an application needs only to care about urlencoded 
> request body.

The problem with application/x-www-form-urlencoded is that it is 
percent-encoded and multipart/form-data is not, thus requiring us to 
deal with encoding, etc. Dealing with encodings is generally a bad idea 
and I prefer to think about request body as a stream of bytes.

Another problem is that if we rename attributes to name.filename= and 
name.path= this will require modifying existing applications and such 
thing would be quite unuseful.

Therefore what I do now is transferring almost identical request body to 
the backend with file fields converted to normal fields containing 
following line:

<temporary file name> <content type> <original file name>

The current code is available under

but it has a problem with generating header for error responses. Use it
on your own risk.

Valery Kholodkov

More information about the nginx mailing list