ruby-on-rails - 如何使用 Rails send_data 从 AJAX 帖子触发下载

标签 ruby-on-rails ajax ruby-on-rails-3 jquery canvas

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

详细信息

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

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

其他选项

  1. 下载图像客户端:我们无法执行此操作,因为 (1) Safari crashes on large base64 URLs和 (2) Safari does not yet support the download attribute on anchor tags我需要指定下载的图像文件名。

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

最佳答案

在 Controller 中创建一个函数

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

然后在 Controller 操作中

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

并使用 _downloadFile.js.erb 在 View 文件夹名称中创建部分内容并写入此行

window.location.href = "<%=@java_url %>"

关于ruby-on-rails - 如何使用 Rails send_data 从 AJAX 帖子触发下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242359/

相关文章:

ruby-on-rails - Rails omniauth facebook SSL 握手失败

ruby-on-rails-3 - 如何组织 Rails App 和多引擎的开发

ajax - WebWorks AJAX 跨域请求

ajax - AJAX 响应可以设置 cookie 吗?

ruby-on-rails - 如何在heroku上使用rails使用twitter/datasift流

ruby-on-rails - rails 3 : Get Random Record

ruby-on-rails - treSTLe HTTP Origin header (https :.。)。与 request.base_url (http://) 不匹配

ruby-on-rails - 如何避免“无法使用 Axlsx gem 分配内存(NoMemory 错误)?

ruby-on-rails - 通过编辑操作更改 AASM 状态

javascript - 在 JQuery 中选择当前表单的值