[Twisted-web] Large file uploads
julian at whisper-net.de
Sat Jul 24 08:32:24 EDT 2010
-----BEGIN PGP SIGNED MESSAGE-----
Am 24.07.2010 05:50, schrieb exarkun at twistedmatrix.com:
> On 23 Jul, 08:34 pm, julian at whisper-net.de wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>> Am 16.07.2010 17:33, schrieb exarkun at twistedmatrix.com:
>>> You can override `Request.gotLength` to inspect the request and select
>>> an appropriate destination for the request body.
>>> You can convince Site to use your custom request by setting it as the
>>> `requestFactory` attribute.
>> thanks for your reply. In meantime I tried cherrypy, which does its job
>> very good but has some flaws compared to my twisted applications when
>> comes to performance and resource usage. So I'm still interested in
>> solving my problem by using twisted.
>> The problem is as follows: The file which shall be uploaded is sent via
>> a HTML form (encoded as multipart/form-data), and I'd like to use
>> Python's FieldStorage to parse the request body because it handles the
>> file matters very well. You can tell cherrypy, that for a certain
>> request uri cherrypy should not parse the request body but instead pass
>> it on unparsed to the handler method.
>> Is there a simple way of configuring twisted.web in this way to?
>> So that e.g. if request uri /do-upload-form is issued, twisted.web does
>> not try to parse the request body on its own and generate the args dict
>> to pass on to the render_POST method, but instead uses FieldStorage (or
>> better: my own subclass of FieldStorage, which employs a NamedTempFile
>> instead of an anonymous tempfile, which allows me to simply rename it
>> after it has passed some sanity checks) for parsing the body?
> This will be easier once #288 is resolved. Until then, you just have to
> hack around with the Request to change the behavior at a very low level.
If I've unterstood the source code of http.py, class Request right, the
methods to override would be:
1. handleContentChunk, which is called after some data has been received
by the transfer decoder. Something that behaves like cgi.FieldStorage,
but in an async way, should be installed here / instead of the StringIO
used for self.content
2. requestReceived, which has nothing to do anymore besides of calling
The only thing that misses now is request's command (GET, POST, HEAD
etc.) and request path. Is there a way to install these in the Request
instance before allContentReceived is called other than overriding
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
-----END PGP SIGNATURE-----
More information about the Twisted-web