2012-09-18 38 views
1

現在我有奇怪的行爲。說,我有zip壓縮存檔二進制數據在StringIO。如果我設置內容參數HttpResponseStringIO.getvalue(),我在客戶端得到截斷文件。與相同的結果StringIO.read()FileWrapper(StringIO)。截斷文件的大小每次都有所不同...如果我從磁盤讀取文件,我會得到正確的文件FileWrapper(file('/ home/user1/tempfile.zip'))。但我需要立即生成zip文件!Django中的StringIO內容的HttpResponse

的Django 1.4,Nginx的1.1.19

回答

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 
+0

不幸的是,它並不能幫助。 –