2011-05-09 72 views
4

我嘗試在我的Django應用程序中下載zip文件。返回zip從django的視圖下載

我應該如何從視圖中返回它?

我嘗試了下面的代碼,但我在瀏覽器中得到了一些警告,其中包含我的zip文件中的內容。

我在做什麼錯?

def download_logs(request): 
    date = datetime.datetime.now().__str__().replace(" ", "_").split(".")[0] 
    os.system("df -h . > /tmp/disk_space") 
    response = HttpResponse(mimetype='application/zip') 
    response['Content-Disposition'] = 'filename=logs_%s.zip' % date 

    files = [] 
    files.append("/tmp/disk_space") 
    buffer = StringIO() 
    zip = zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) 
    for name in files: 
     file = open(name, "r") 
     zip.writestr(name, file.read()) 
     file.close() 
    zip.close() 
    buffer.flush() 

    ret_zip = buffer.getvalue() 
    buffer.close() 
    response.write(ret_zip) 
    return response 

回答

2

您應該告訴瀏覽器將響應視爲文件附件。

docs,你應該這樣做:

>> response = HttpResponse(my_data, mimetype='application/vnd.ms-excel') 
>>> response['Content-Disposition'] = 'attachment; filename=foo.xls'