小编典典

如何使用Rails send_data触发来自AJAX帖子的下载

ajax

我试图用来send_data返回一个PNG图像作为对ajax发布请求的响应。如何让浏览器触发成功回调上的下载?

细节

我正在使用生成一个大型的base64图像canvas.toDataURL(),然后将其发布到Rails(v3.2.6)。Rails将其解码为二进制PNG,然后将图像发送回客户端。

我也尝试过,send_file但是有同样的问题。

其他选择

  1. 下载图片客户端: 我们无法这样做,因为(1)Safari在大型base64 URL上崩溃,并且(2)Safari尚不支持锚标签的download属性,我需要指定下载的图片文件名。

  2. 使用a$.get代替$.post我们不能这样做,因为我们需要canvas.toDataURL()将请求连同请求一起发送到服务器。GET请求URI有大小限制。


阅读 200

收藏
2020-07-26

共1个答案

小编典典

在控制器中创建函数

def ajax_download
  send_file "path_to_file/" + params[:file]
end

然后在控制器动作中

respond_to do |format|
  @java_url = "/home/ajax_download?file=#{file_name}"
  format.js {render :partial => "downloadFile"}
end

并使用_downloadFile.js.erb在视图文件夹中创建部分名称,并编写此行

window.location.href = "<%=@java_url %>"
2020-07-26