我有一個django視圖,我想返回一個Excel文件。該代碼是下面:在HttpResponse中返回一個python bytearray
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
在該例子中,類型是<type 'bytearray'>
包含Excel電子表格的二進制數據。
問題是,當我嘗試下載該視圖並使用Excel打開它時,它以混亂的二進制數據形式出現。我知道bytearray
是正確的,雖然,因爲如果我做到以下幾點:
f = open('temp.xls', 'wb')
f.write(spec.get_template())
我可以在Excel中打開temp.xls
完美。
我甚至只要修改我的觀點來了:
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
和它的作品perfectly-我可以打開從瀏覽器到Excel XLS文件,並一切正常。
所以我的問題是:在將其傳遞給HttpResponse
之前,我需要做什麼bytearray
。爲什麼將它保存爲二進制文件,然後重新打開它的工作是完美的,但通過bytearray
本身會導致數據亂碼?
*如何*它是亂碼? – 2012-03-16 03:35:31
這是一個亂碼的單個ASCII文本,非常非常長。 – dgel 2012-03-16 03:37:09
根據'file':'ASCII文本,很長的行,沒有行結束符' – dgel 2012-03-16 03:37:29