|
Mike Looijmans
nlv11281 at natlab.research.philips.com
Mon Jan 9 04:51:53 EST 2006
Daniel Nogradi wrote:
> Is it possible to "stream" zipped data using the publisher handler?
Sure. I'm streaming multi-gigabyte TAR archives to/from tape and other
storage this way.
The ZIPfile and TARfile units are quite alike.
In my case, using a temporary file is not an option - the archives may
span multiple 400GB (no, that's not a typo) tapes.
When streaming out the data, set the 'Transfer-Encoding' header to
"chunked". This is neccesary because you don't know forehand how much
data you'll be sending. Output the data in chunks, by writing the (hex)
size of the chunk, followed by \r\n and the data, followed by \r\n.
This code snippet copies data from the 'stream' to 'wfile' using chunked
encoding:
while 1:
data = stream.read()
if not data:
break
# chunk header is <hex-size>\r\n
l = len(data)
wfile.write("%x\r\n" % l)
# output data
wfile.write(data)
# chunk footer
wfile.write("\r\n")
# write chunk terminator
wfile.write("0\r\n\r\n")
All that's left to do is grab the output from the Zipfile writer and
send it to the chunk encoder. You can probably directly replace
zipfile.write().
Mike.
--
Mike Looijmans
Philips Natlab / Topic Automation
|