使用Django下载文件

拉里·马爹利

我正在尝试使用django下载使用xlsxwriter生成的xlsl文件。我之前已经写过很多次这样的代码,但是没有使用xlsxwriter(使用csvwriter)编写,并且运行良好。但是,在这种情况下,当我下载文件时,它始终为空。但是文件系统上的文件不是。

这是我的查看代码:

def download_xls(self, request):
    os.chdir('/tmp')
    xls_name = re.sub('\s+', '_', "%s_%s_%s.xlsx" % (
        request.user.username.lower(),
        self.report.name.lower(),
        datetime.now().strftime('%y%m%d_%H%I%S')))

    workbook = xlsxwriter.Workbook(xls_name)
    worksheet1 = workbook.add_worksheet()
    worksheet2 = workbook.add_worksheet()

    worksheet1.write("A1", "hello1")
    worksheet2.write("A1", "hello2")

    workbook.close()
    response = HttpResponse(content_type='application/ms-excel')
    response['Content-disposition'] = "attachment; filename=%s" % xls_name
    return response

这是文件系统上的文件:

-rw-r--r--  1 _www            wheel   5751 Oct 24 09:14 /tmp/admin_wafer_viz_151024_090900.xlsx

这是下载的文件:

[email protected]   1 LarryMartell  staff      0 Oct 24 09:14 admin_wafer_viz_151024_090900.xlsx

有人可以看到我在这里做错了什么愚蠢的简单事情吗?

塞巴斯蒂安·沃兹尼

您需要将工作簿保存到响应中,以将实际文件放入HTTP响应中:

def download_xls(self, request):
    os.chdir('/tmp')
    xls_name = re.sub('\s+', '_', "%s_%s_%s.xlsx" % (
        request.user.username.lower(),
        self.report.name.lower(),
        datetime.now().strftime('%y%m%d_%H%I%S')))
    output = io.BytesIO()

    workbook = Workbook(output, {'in_memory': True})
    worksheet1 = workbook.add_worksheet()
    worksheet2 = workbook.add_worksheet()

    worksheet1.write("A1", "hello1")
    worksheet2.write("A1", "hello2")

    workbook.close()

    output.seek(0)

    response = HttpResponse(content_type='application/ms-excel')
    response['Content-disposition'] = "attachment; filename=%s" % xls_name

    return response

您也可以尝试使用xlwt软件包,它看起来更简单:

workbook.save(response)
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = "attachment; filename=%s" % xls_name

您可以在这里看到我的一个项目的示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章