在rails 2.3.11 app中,我正在尝试注册仅供登录用户使用的文件下载。 当他们点击链接下载文件(这是指向公共目录中文件的直接链接)时,我希望rails应用程序调用方法。
我想我应该使用link_to_function,我可以在rails中编写javascript /方法来记录下载。
我不知道如何在调用方法后继续下载文件。在方法调用之后(即在后台),应该开始文件下载。
有什么想法吗?
答案 0 :(得分:0)
你可能过度思考这个问题,不需要Javascript。你想要的是一个下载动作的链接,下载动作反过来注册下载然后流回文件。这应该可以正常工作,除非你有一个非常大的文件,你不希望Rails必须处理。
从控制器发回二进制文件的示例:
send_data(binary_data, :type => 'application/pdf', :filename => 'myfile.pdf', :disposition => 'inline' )
甚至更好:
render :content_type => 'application/octet-stream', :text => Proc.new { |response, output|
# do something that reads data and writes it to output
}
答案 1 :(得分:0)
Abdullah Jibaly完美的答案是不需要Javascript的优势。
我最终实现了一个jQuery javascript解决方案,让文件下载一样。
在我看来,添加下载类的链接对于js的工作非常重要:
<%= link_to document.type.value, document.scan.url, :popup => true, :class => "download" %>
添加了javascript,我添加了一个property_id作为发布的数据,因为我需要在我的控制器中使用该值:
<script type="text/javascript">
$(document).ready(function() {
$(".download").click(function(event){
$.post("/ajax/property_interested_user", { property_id: $("#property_id").html() });
});
});
</script>