【发布时间】:2013-04-20 23:27:19
【问题描述】:
我正在尝试使用 send_data 返回一个 PNG 图像作为 ajax 发布请求的响应。如何让浏览器在成功回调时触发下载?
详情
我正在使用canvas.toDataURL() 生成一个大型 base64 图像,然后将其发布到 Rails (v3.2.6)。 Rails 将其解码为二进制 PNG,并将图像发送回客户端。
我也试过send_file,但也有同样的问题。
其他选项
下载图像客户端:我们不能这样做,因为 (1) Safari crashes on large base64 URLs 和 (2) Safari does not yet support the download attribute on anchor tags 我需要指定下载的图像文件名。
使用
$.get代替$.post: 我们不能这样做,因为我们需要将canvas.toDataURL()与请求一起发送到服务器。GET请求 URI 有大小限制。
【问题讨论】:
-
然后将来自 AJAX 请求的数据放入会话中,然后通过
location.href="..."指向发送适当标头的脚本触发下载,从会话中传递数据,然后将其删除来自会话。 -
不确定为什么要使用 AJAX 请求来下载文件。尊重 send_data/send_file 操作的非 AJAX link_to 应该下载图像。
-
我认为这是一个关于如何将数据下载为文件的http标准。也许使用 content_type: 'image/png' ?
-
我不得不做同样类型的事情,最后只是解码和保存图像服务器端,然后在 javascript 中使用 window.open 打开一个窗口,该窗口使用服务器中的 send_file 来获取图像,然后只需删除服务器上的临时图像。
标签: ruby-on-rails ajax ruby-on-rails-3 jquery canvas