Mit*_*tch 4 pdf django google-chrome http
使用Django,我从服务器发送一个pdf文件.如果我使用以下方式将其作为附件发送:
response['Content-Disposition'] = 'attachment; filename=test.pdf'
Run Code Online (Sandbox Code Playgroud)
它下载得很好,但在Chrome控制台中有一个错误:
GET http://12.345.678.09/vpas/?print_confirm=true undefined (undefined)
Run Code Online (Sandbox Code Playgroud)
如果我在不设置响应的Content-Disposition的情况下发送pdf,则没有错误.这个错误的原因是什么,我怎么能摆脱它?
这是http(来自Firefox - 无法从Chrome获取尽可能多的详细信息):
http://12.345.678.09/vpas/?print_confirm=true&vpa_id_to_print=2355
GET /vpas/?print_confirm=true&vpa_id_to_print=2355 HTTP/1.1
Host: 12.345.678.09
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17 GTB7.1 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: sessionid=fdabaccd2a731fd459cd5d6c3f5004f1
Cache-Control: max-age=0
HTTP/1.1 200 OK
Server: nginx/0.5.33
Date: Mon, 02 May 2011 00:59:48 GMT
Content-Type: application/pdf
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Cookie
Content-Disposition: attachment;
Set-Cookie: sessionid=fdabaccd2a731fd459cd5d6c3f5004f1; expires=Mon, 02-May-2011 01:59:48 GMT; Max-Age=3600; Path=/
Run Code Online (Sandbox Code Playgroud)
这是我可以从Chrome获得的http:
Request URL:http://12.345.678.09/vpas/?print_confirm=true&vpa_id_to_print=2355
Request Headers
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.60 Safari/534.24
Query String Parameters
print_confirm:true
vpa_id_to_print:2355
Run Code Online (Sandbox Code Playgroud)
小智 13
问题是由Chrome 16遵循正确的RFC标准引起的.
您必须用双引号括起文件名.请参阅http://code.google.com/p/chromium/issues/detail?id=103618
在你的情况下,它会......
response['Content-Disposition'] = 'attachment; filename="test.pdf"'
Run Code Online (Sandbox Code Playgroud)
同样重要的是,您已经使用分号来分隔值而不是逗号.这可能会导致Chrome中的结果相同
if not 'HTTP_USER_AGENT' in request.META or u'WebKit' in request.META['HTTP_USER_AGENT']:
# Safari 3.0 and Chrome 2.0 accepts UTF-8 encoded string directly.
filename_header = 'filename=%s' % original_filename.encode('utf-8')
elif u'MSIE' in request.META['HTTP_USER_AGENT']:
try:
original_filename.encode('ascii')
except UnicodeEncodeError:
original_filename = 'subtitles.' + h.file_type
filename_header = 'filename=%s' % original_filename
else:
# For others like Firefox, we follow RFC2231 (encoding extension in HTTP headers).
filename_header = 'filename*=UTF-8\'\'%s' % iri_to_uri(original_filename.encode('utf-8'))
response['Content-Disposition'] = 'attachment; ' + filename_header
Run Code Online (Sandbox Code Playgroud)
这是文件下载的示例。它是如此复杂,因为不同的浏览器以不同的方式处理“非 ascii”名称,这适用于 Chrome。
| 归档时间: |
|
| 查看次数: |
3828 次 |
| 最近记录: |