[Zope3-dev] Viewing/downloading large files

Jim Fulton jim at zope.com
Mon Aug 22 18:01:27 EDT 2005


Garrett Smith wrote:
>>From the looks of the z/a/file/File code, viewing a file will cause all of the file contents to be loaded into memory (specifically, I'm looking at line 45 of z/a/file/browser/file.py).
> 
> Is there a way to provide a file-like object (no pun intended, i.e. something with streaming capabilities) to the response rather than a single block of bytes?

Yes, this *should* be possible.  File would need to grow a method to
get at the underlying chunk data, and a view would need to be provided that
used request.response.write to output the data.  Christian Theune and I
looked at this in early 2004 and, at the time, though, there seemed to
be a pub in the publisher that would have prevented this from being useful.
Unfortunately, I don't remember the details.  At the time, it wasn't important
enough to fix, but it's too bad that it hasn't been fixed by now.


There are 2 developments looming that would affect this:

1. ZODB is growing Blob support.  This will both provide much better
    handling of fairly large files at the ZODB lavel and suggests a more
    file-like API.

2. I'd really like to look at making the publisher more WSGI friendly
    for 3.2.  In particular, I'd like to provide a way for a published
    object to provide an iterator that could be served efficiently, rather
    than using response.write. In fact, I'd like to deprecate response.write.

I'd be happy to help with this if someone wants to work on it.

Jim

-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org


More information about the Zope3-dev mailing list