Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 下载作为响应的文件_Jquery_Ajax_Django - Fatal编程技术网

Jquery 下载作为响应的文件

Jquery 下载作为响应的文件,jquery,ajax,django,Jquery,Ajax,Django,我试图实现以下目标:在客户端,使用Jquery/Ajax向Django服务器发出Post请求。在服务器端,我得到这个请求,提取参数,根据这个参数,我确定一个文件路径,然后构建一个HttpResponse,目的是让浏览器下载该文件 然而,这并没有发生,尽管我在响应中看到了所附文件的内容 响应构建为: response = HttpResponse(file(path_to_file)) response['Content-Type'] = 'application/force-download

我试图实现以下目标:在客户端,使用Jquery/Ajax向Django服务器发出Post请求。在服务器端,我得到这个请求,提取参数,根据这个参数,我确定一个文件路径,然后构建一个HttpResponse,目的是让浏览器下载该文件

然而,这并没有发生,尽管我在响应中看到了所附文件的内容

响应构建为:

 response = HttpResponse(file(path_to_file))
 response['Content-Type'] = 'application/force-download'
 response['Content-Length'] = os.path.getsize(path_to_file)
 response['Content-Disposition'] = 'attachment; filename=\"request.txt\"'
 response['Accept-Ranges'] = 'bytes'
 return response
以下是firebug的响应标题

Accept-Ranges   bytes
Connection  keep-alive
Content-Disposition attachment; filename=grequest.txt
Content-Length  228
Content-Type    application/force-download
Date    Fri, 18 Jul 2014 14:55:33 GMT
Server  nginx/1.4.4
Set-Cookie  sessionid=41602cd107bbddb41e8884a88c9035c0; Path=/
Vary    Authorization, Cookie
eyJub2RlSUQiOiIwMmI1ODMtYjNhMTljLWM1MjkwYi05YzAwIiwiYWxpYXMiOiJsb2NhbGhvc3QiLCJkbnNOYW1lIjoibG9jYWxob3N0IiwiY2hhc3Npc1NlcmlhbCI6IiIsImFjdGl2YXRpb25zIjpbeyJhY3RpdmF0aW9uSUQiOiI3RjE3LUZFRUQtMTI5Ny1GOTUyIiwicXVhbnRpdHkiOiIzIn1dfQ==
以下是firebug的响应内容

Accept-Ranges   bytes
Connection  keep-alive
Content-Disposition attachment; filename=grequest.txt
Content-Length  228
Content-Type    application/force-download
Date    Fri, 18 Jul 2014 14:55:33 GMT
Server  nginx/1.4.4
Set-Cookie  sessionid=41602cd107bbddb41e8884a88c9035c0; Path=/
Vary    Authorization, Cookie
eyJub2RlSUQiOiIwMmI1ODMtYjNhMTljLWM1MjkwYi05YzAwIiwiYWxpYXMiOiJsb2NhbGhvc3QiLCJkbnNOYW1lIjoibG9jYWxob3N0IiwiY2hhc3Npc1NlcmlhbCI6IiIsImFjdGl2YXRpb25zIjpbeyJhY3RpdmF0aW9uSUQiOiI3RjE3LUZFRUQtMTI5Ny1GOTUyIiwicXVhbnRpdHkiOiIzIn1dfQ==
在这种情况下,附加文件的内容


关于我做错了什么有什么建议吗?

对代码进行一些调整。试试这个

response = HttpResponse(file(path_to_file).read(), mimetype='application/force-download')
还有,为什么要在中转义双引号

response['Content-Disposition'] = 'attachment; filename=\"request.txt\"'

不能使用Ajax从服务器下载文件。出于安全原因,不允许Javascript与客户端硬盘交互,因此无法将响应保存到磁盘

常见的解决方法是包括一个隐藏的iframe并使用Javascript设置
src
属性,或者使用Javascript设置
window.location.href
。这两种方法都应该在不离开当前页面的情况下向用户提示保存对话框

试试看

html


JSFIDLE

添加了建议的更改,但行为保持不变。请在不使用
mimetype
内容类型的情况下尝试。至少应在浏览器中显示该文件。如果没有发生这种情况,请检查该文件是否确实存在。然后在shell中尝试一个
.read()
。你能添加几行代码让它更清晰吗?@steve网络上有很多例子,这些人比我更了解html/javascript。我建议您搜索“隐藏iframe下载”或“窗口位置下载”。谢谢,我将继续调查此问题