【问题标题】:Trouble getting browser to download from python cgi script无法从 python cgi 脚本下载浏览器
【发布时间】:2014-01-28 05:50:08
【问题描述】:

我正在尝试将 .JSON 下载到客户端计算机以进行备份。现在我这样做的方式是通过一个由 JQuery POST 请求调用的 cgi 脚本。我按照指南at the bottom of this page 提出了“文件下载...”框,以及来自this question's 接受的答案的信息。

目前,脚本运行,并正确返回 JSON,但浏览器并没有自动下载它,也没有像我预期的那样弹出“文件下载”框。

这是我的标题和脚本中的打印语句:

print "Content-Type: application/octet-stream; name='testfile.json'"
print "Content-Disposition: attachment; filename='testfile.json'\n"
print json.dumps(configJSON)

我不确定我是否错误地格式化了上述内容,或者我是否必须在我的请求中添加一些内容才能下载响应。目前我的要求如下:

$.ajax({
    type: 'POST',
    url: 'cgi-bin/sendConfig.py',
})

正如我上面所说,我可以看到可能需要在请求中添加 .done() 函数,但是上面链接的文章的编写方式似乎应该自动启动 Content-Type 和 Content-Disposition 设置下载

【问题讨论】:

    标签: jquery python ajax download cgi


    【解决方案1】:

    Javascript 设计无法访问文件系统,因此无法通过 ajax 启动文件下载。

    如果您直接使用浏览器访问该网址 (cgi-bin/sendConfig.py),您将收到下载提示。

    如果您需要通过 javascript 启动此下载,您可以尝试几个选项。 您可以重定向到页面:

    window.location.href = "http://yoursite.com/cgi-bin/sendConfig.py";
    

    或在页面中添加一个不可见的 iframe:

    $('body').append('<iframe src="http://yoursite.com/cgi-bin/sendConfig.py" style="display:none;"></iframe>');
    

    【讨论】:

    • 哇,谢谢!你知道,我已经读过,正如你在我之前研究这个时所说的“设计的 Javascript 无法访问文件系统”,但不知何故,我没有把它放在我的脑海中,这意味着我不能使用 AJAX 来实现这一点。不过,似乎有一个新的潜在问题。该脚本似乎有效,该文件似乎已完整下载,但 Chrome 在网络选项卡中显示该脚本已“取消”。此外,我曾期待“下载为...”类型的窗口,但文件自动下载。不过,那可能只是 Chrome。
    • Chrome 没有将下载显示为框,但被取消的东西很奇怪。您可能需要调整标题,也许:'Content-Type: application/json'
    猜你喜欢
    • 2015-06-14
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2021-10-20
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多