通过AJAX强制下载

时间:2012-08-31 16:20:20

标签: html ajax forms post download

我正在寻找一种方法将POST数据发送到后端脚本,使用它来动态生成一个临时文件(暂时的,因为它是动态生成的,不会保存到磁盘中在服务器上),然后将其提供给客户端作为下载。

我的后端脚本运行正常。问题是我还没有找到通过AJAX调用获取下载提示的方法。

如果我不是POST数据,我会使用类似的内容:

window.location.href = 'path/to/my/script.php';

即使可能,我还能做什么?可以在不诉诸" hacks"比如将表单动态注入DOM并提交,或者打开另一个浏览器窗口等等?

2 个答案:

答案 0 :(得分:4)

  1. 发出POST请求;
  2. 创建资源;
  3. 回答资源路径;
  4. window.location.href = resourcePath
  5. [可选]想从第三方下载保护这样的资源吗?附上一个CSRF令牌,只有在CSRF检查通过后才能使资源可用 - 否则恭喜你,你刚赢了一只403小狗!
  6. 如果资源有正确的标题,浏览器会要求您使用特定应用保存/打开它。 /等等。

答案 1 :(得分:1)

如果没有经典表单提交,你不能这样做,除非你能以某种方式通过GET提供下载。

然而,无论如何这样做都是一个好主意,因为下载管理器等通常不能很好地与POST一起工作 - 所以只需让你的脚本生成一个临时URL,然后使用你在你的帖子中发布的JavaScript重定向到该URL问题