6

私はディスク上にファイルを作成することを避けています、これは私がこれまでに得たものです:

def get_zip(request):
    import zipfile, StringIO
    i = open('picture.jpg', 'rb').read()
    o = StringIO.StringIO()
    zf = zipfile.ZipFile(o, mode='w')
    zf.writestr('picture.jpg', i)
    zf.close()
    o.seek(0)
    response = HttpResponse(o.read())
    o.close()
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment; filename=\"picture.zip\""
    return response

あなたは正しい-エレガント-pythonicで十分だと思いますか?それを行うためのより良い方法はありますか?

ありがとう!

4

2 に答える 2

12

StringIOあなたは一般的に結果を得るために使用する必要がありますo.getvalue()。また、通常のファイルをzipファイルに追加する場合は、を使用できますzf.write('picture.jpg')。手動で読む必要はありません。

于 2010-03-09T18:32:21.067 に答える
4

ディスクファイルを回避すると、サーバーのクロール速度が低下する可能性がありますが、確実に機能します。

これらのリクエストの多くを同時に処理すると、メモリが使い果たされます。

于 2010-03-09T18:32:00.550 に答える