【发布时间】:2012-07-19 04:44:56
【问题描述】:
我无法通过 ajax 从我的 rails 服务器下载文件:
如果将参数传递给显示操作,我的下载控制器中有一个显示操作调用send_file。
然后我有一个页面,其中有一个select 下拉列表,其中显示了服务器上的文件列表。当我选择一个值并单击下载按钮时,它会发出一个 ajax 请求,该请求会发送一个由我的下载控制器处理的 GET 请求。
查看我的服务器日志,似乎 ajax 请求正在工作,它说:
Started GET "/download?file=test.txt" for 127.0.0.1 at 2012-07-19 15:13:41 -0700
Processing by DownloadsController#show as HTML
Parameters: {"file"=>"test.txt"}
Sent file /Users/Admin/Documents/rails_projects/test/public/data/test.txt (0.1ms)
Completed 200 OK in 0ms (ActiveRecord: 0.0ms)
但实际上没有下载任何内容。当我实际手动访问show 页面时,文件实际上已被下载。我究竟做错了什么?
--
Javascript
<script type="text/javascript">
$(function() {
$('#button').click(function() {
var s = $("select#dropdown_select").val();
$.ajax({
type: 'GET',
url: 'http://localhost:3000/download?file=' + s,
dataType: "HTML"
});
})
});
</script>
下载控制器
def show
filename = params[:dl]
if(filename.nil? == false)
path = Rails.root.join('public/data', filename)
send_file path, :x_sendfile => true
end
end
【问题讨论】:
-
你不能用ajax下载文件,你应该允许用户提交表单(选择你提到的)并允许浏览器处理请求和响应
标签: javascript ruby-on-rails ajax sendfile