如何创建不闪烁的下载链接?

时间:2016-12-29 01:01:35

标签: ruby-on-rails file download ruby-on-rails-5 link-to

我希望用户能够从我在控制器中设置的方法下载文件。此外,我不希望在用户下载文件时在我的浏览器中更改URL。我已设置此链接

<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), target: '_blank' %>

问题是,当生成新选项卡以生成下载时,屏幕会闪烁。这看起来没什么吸引力。我已经看到其他网站,你点击链接,一些东西开始下载,没有闪烁。我该怎么做?

编辑:以下是链接

调用的函数
def download_cc
  scenario = Scenario.find(params[:scenario_id])
  send_data scenario.cc_data, filename: "#{scenario.title}.imscc", type: 'application/zip', :disposition => 'attachment'
end

4 个答案:

答案 0 :(得分:1)

只需在链接中添加“下载”属性:

<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), download: true %>

答案 1 :(得分:1)

我做了一些本地测试,我的假设是 Turbolinks搞砸了。我建议您从链接中删除target: '_blank'并添加data: { turbolinks: false }以选择停用此特定链接的Turbolinks。更改后的代码应如下所示:

<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), data: { turbolinks: false } %>

您的控制器操作看起来很好,无需更改。

答案 2 :(得分:0)

删除目标

目前,您正在设置target =&#34; _ blank&#34;,这告诉浏览器,当您单击该URL时,您想要打开一个新选项卡。删除它应该只是开始下载而不打开选项卡或窗口。

&LT;我误解了您的问题,下面是可选的额外信息:&gt;

格式化链接的外观

您是否使用任何HTML或CSS进行网站设计?如果是这样,您可以应用css状态属性,例如&#34; active&#34; &#34;悬停&#34; &#34;访问&#34; &#34;连结&#34;在你的CSS课程中。

让我们说你有一个链接:

<a href="example.com">My Link</a>

如果您创建了css文件并自定义了链接的属性:

a:visited {
    text-decoration: none;
}

将允许您更改已访问链接的外观。然后,您可以使用任何css属性以您想要的任何方式自定义外观。

将CSS文件添加到Ruby应用程序

使用Ruby,您可以使用:&lt;%= stylesheet_link_tag&#34; filename&#34; %GT;加载到css文件中。

<强>来源: http://www.w3schools.com/css/css_link.asp How do I use CSS with a ruby on rails application?

答案 3 :(得分:0)

只要您使用send_file,就不应该看到屏幕闪烁

控制器中的scenario_download_cc_path(subscription.scenario)操作应如下所示:

file_path = File.join(Rails.root, "/public/myfile.whatever")
send_file file_path

无论您的链接是否包含target: '_blank'

,Chrome和IE上的行为都会相同