[Grok-dev] File Upload with Tramline

Martijn Faassen faassen at startifact.com
Mon Jan 11 19:33:51 EST 2010


Hey,

Hannes wrote:
> I've another concern. I played a little bit with Tramline and HurryFile.
> 
> How do I get a upload widget? How do I handle the remote file transfer 
> from the client to the server?
> 
> Is this all done automatically? The HurryFile sample code from PyPi has 
> some gaps... :-(

I agree that the example has gaps - it isn't a great example as it was 
primarily written for testing purposes..

For normal file uploads you could use hurry.file, setting the widget as 
a custom_widget to your form (find a form tutorial), but you could even 
just resort to a 'schema.File' field and everything should work. 
hurry.file just makes a few things a bit more convenient (like retaining 
the uploaded file when the form failed to validate instead of forcing a 
reupload).

The difficulty is with storing large files in the ZODB. Tramline is one 
way around this (you can find tramline's INSTALL.txt here):

http://codespeak.net/svn/rr/tramline/trunk/

This makes use of Apache's upload and download facility but can be 
somewhat involved to set up.

Alternatively these days the ZODB is quite capable of storing large 
files as a "blob". Tramline can be avoided that way (even though the 
performance of tramline would probably be a bit higher for many uploads 
or downloads).

z3c.blobfile can be used to help storing large files in a convenient way.

http://pypi.python.org/pypi/z3c.blobfile

An example of this can be found here (in an older grok application, and 
no UI bits are included as this is a web service):

http://code.google.com/p/imagestore/source/browse/trunk/src/imagestore/image.py

(and imagecontainer.py. actually the use is only very minimal so perhaps 
not that instructive)

Once you get something figured out we'd be very happy to see a tutorial 
or howto appear on grok.zope.org by the way. :)

Regards,

Martijn



More information about the Grok-dev mailing list