从Django模板下载文件作为附件在firefox中不起作用

时间:2017-06-15 08:05:24

标签: html django django-templates

我有一个Django视图( download-attachment ),它返回一个django.http.response.HttpResponse对象。

对象的字典表示为:

{
    'reason_phrase': u'OK', 
    '_handler_class': None, 
    '_headers': {'content-length': ('Content-Length', '21'), 
                 'content-type': ('Content-Type', 'text/plain'),
                 'content-disposition': ('Content-Disposition', 'attachment; 
    filename="upload_file.txt"')
                }, 
    '_charset': None, 
    '_closable_objects': [], 
    'cookies': <SimpleCookie: >, 
    'closed': False, 
    '_container': ['Upload to file\n']
}

在模板中,单击超链接即可呈现视图:

<a href="{% url "download-attachment" certificationID=certificationID fileID=attachment.id %}" download> {{attachment.name}}</a>

此处,certificationID和fileID是下载附件视图的网址参数。

在chrome中,单击超链接时,文件将作为附件下载,其中包含在响应的Content-Disposition标题中给出的文件名。

在firefox中,文件下载失败。需要帮助使文件下载在firefox中工作。

1 个答案:

答案 0 :(得分:0)

不是客户端或模板问题。 Firefox需要在响应标头中设置Content-Encoding实体以下载文件附件。即使没有编码,也需要设置标头。添加了内容 - 编码Django HttpResponse对象。

对象的新字典表示为:

{
    'reason_phrase': u'OK', 
    '_handler_class': None, 
    '_headers': {'content-length': ('Content-Length', '21'), 
                 'content-type': ('Content-Type', 'text/plain'),
                 'content-encoding': ('Content-Encoding', 'None'),
                 'content-disposition': ('Content-Disposition', 'attachment; 
    filename="upload_file.txt"')
                }, 
    '_charset': None, 
    '_closable_objects': [], 
    'cookies': <SimpleCookie: >, 
    'closed': False, 
    '_container': ['Upload to file\n']
}