如何从AJAX帖子中使用Rails send_data触发下载

may*_*ron 24 ajax jquery canvas ruby-on-rails ruby-on-rails-3

我正在尝试使用send_data返回PNG图像作为ajax post请求的响应.如何让浏览器触发成功回调的下载?

细节

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

我也试过,send_file但它有同样的问题.

其他选择

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

  2. 使用a $.get而不是$.post:我们不能这样做,因为我们需要canvas.toDataURL()将请求发送到服务器.GET请求URI具有大小限制.

Asn*_*tta 22

在控制器中创建一个函数

def ajax_download
  send_file "path_to_file/" + params[:file]
end
Run Code Online (Sandbox Code Playgroud)

然后在控制器动作中

respond_to do |format|
  @java_url = "/home/ajax_download?file=#{file_name}"
  format.js {render :partial => "downloadFile"}
end
Run Code Online (Sandbox Code Playgroud)

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

window.location.href = "<%=@java_url %>"
Run Code Online (Sandbox Code Playgroud)

  • @mayatron请批准这个 (3认同)
  • 值得一提的是,在 `send_file` 中使用 `params[:file]` 是未经消毒的,可能会导致数据被盗。 (3认同)