Code: Alles auswählen
buffer = cStringIO.StringIO()
z = zipfile.ZipFile(buffer, "w")
for file_info in files:
z.write(file_info)
z.close()
if simulation:
self.request.write("-"*80)
self.request.write("\n")
buffer.seek(0,2) # Am Ende der Daten springen
buffer_len = buffer.tell() # Aktuelle Position
buffer.seek(0) # An den Anfang springen
filename = posixpath.split(self.request_path)[-1]
if not simulation:
self.request.headers['Content-Disposition'] = 'attachment; filename="%s.zip"' % filename
self.request.headers['Content-Length'] = '%s' % buffer_len
self.request.headers['Content-Transfer-Encoding'] = 'binary'
self.request.headers['Content-Type'] = 'application/octet-stream; charset=utf-8'
self.request.write(buffer.getvalue())
Nun überlege ich ein billiges "Traffic Shaping" bzw. throttling einzubauen... Meine Idee. Ich übertrage die Daten von buffer stückweise in self.request.write() rüber und zwischendurch mache ich ein time.sleep()...
Nur, wie lese ich Stückweise aus einem StringIO herraus?