2011-05-09 64 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'