gpt4 book ai didi

python - 在 HttpResponse 中返回一个 python bytearray

转载 作者:行者123 更新时间:2023-11-28 18:52:46 26 4
gpt4 key购买 nike

我有一个 Django View ,我想返回一个 Excel 文件。代码如下:

def get_template(request, spec_pk):
spec = get_object_or_404(Spec, pk=spec_pk)

response = HttpResponse(spec.get_template(), mimetype='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename=%s_template.xls' % spec.name
return response

在那个例子中,spec.get_template() 的类型是<type 'bytearray'>其中包含 Excel 电子表格的二进制数据。

问题是,当我尝试下载该 View 并使用 Excel 打开它时,它以乱码二进制数据的形式出现。我知道 bytearray不过是正确的,因为如果我执行以下操作:

f = open('temp.xls', 'wb')
f.write(spec.get_template())

我可以打开temp.xls在 Excel 中完美显示。

我什至将我的观点修改为:

def get_template(request, spec_pk):
spec = get_object_or_404(Spec, pk=spec_pk)
f = open('/home/user/temp.xls', 'wb')
f.write(spec.get_template())
f.close()

f = open('/home/user/temp.xls', 'rb')
response = HttpResponse(f.read(), mimetype='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename=%s_template.xls' % spec.name
return response

它工作得很好——我可以从浏览器将 xls 文件打开到 Excel 中,一切正常。

所以我的问题是 - 我需要做什么 bytearray在我将它传递给 HttpResponse 之前.为什么将其保存为二进制文件,然后重新打开它可以正常工作,但传递了 bytearray本身导致数据乱码?

最佳答案

好吧,通过完全随机(并且非常持久)的反复试验,我找到了使用 python binascii 模块的解决方案。

这个有效:

response = HttpResponse(binascii.a2b_qp(spec.get_template()), mimetype='application/ms-excel')

根据 binascii.a2b_qp 的 python 文档:

Convert a block of quoted-printable data back to binary and return the binary data. More than one line may be passed at a time. If the optional argument header is present and true, underscores will be decoded as spaces.

希望有人能告诉我为什么将它保存为二进制文件,然后重新打开它仍然有效。

关于python - 在 HttpResponse 中返回一个 python bytearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com