如何从AJAXpost中使用Rails send_data触发下载
我正在尝试使用send_data
返回PNG图像作为ajax post请求的响应。 如何让浏览器触发成功回调的下载?
细节
我正在使用canvas.toDataURL()
生成一个大的base64图像,然后将其发布到Rails(v3.2.6)。 Rails将其解码为二进制PNG,并将图像发送回客户端。
我也试过send_file
但它有同样的问题。
其他选择
-
下载图像客户端:我们不能这样做,因为(1) Safari在大型base64 URL上崩溃 ,以及(2) Safari还不支持锚标签上的下载属性 ,我需要指定下载的图像文件名。
-
使用
$.get
而不是$.post
:我们不能这样做,因为我们需要将带有请求的canvas.toDataURL()
发送到服务器。GET
请求URI具有大小限制。
在控制器中创建一个函数
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 %>"
您无法从JS将文件下载到磁盘。 这是一个安全问题。 请参阅下面的博客文章以获得一个好的解决方法。