1

私は今奇妙な行動をしています。たとえば、 StringIOにzipアーカイブバイナリデータがあります。HttpResponseのcontentパラメータをStringIO.getvalue()に設定すると、クライアント側で切り捨てられたファイルが取得されます。StringIO.read()FileWrapper(StringIO)で同じ結果になります。切り詰められたファイルのサイズは毎回異なります...ディスクFileWrapper(file('/home/user1/tempfile.zip'))からファイルを読み取ると、正しいファイルが得られます。しかし、その場でzipファイルを生成する必要があります!

ジャンゴ 1.4、ニンクス 1.1.19

4

1 に答える 1

3

これを見てください:

import zipfile
from cStringIO import StringIO
from contextlib import closing
from django.http import HttpResponse


def foo(request):
    ...
    with closing(StringIO()) as ff:
        zipped = zipfile.ZipFile(ff, 'a')
        for i, wb in enumerate(workbooks):
            with closing(StringIO()) as f:
                wb.save(f)
                zipped.writestr('%s.xls' % (i + 1), f.getvalue())
        zipped.close()
        foo = ff.getvalue()
    filename = 'foo.zip'
    response = HttpResponse(mimetype="application/zip")
    response['Content-Disposition'] = "attachment;filename=%s" % filename
    response.write(foo)
    return response
于 2012-09-19T18:50:48.913 に答える