2

我正在使用 Rails 服务器,我可以从中下载本地存储的电影和动漫等。这是一种工作,但是当我单击下载链接时,我必须刷新页面才能真正开始下载。

这是处理下载的控制器:

class DownloadController < ApplicationController
  def index
    @title = params[:title]
    @name = params[:name]
    @path = '/media/sf_Anime,_VN,_LN/Watching, not watched yet/'+@title+'/'+@name
    send_file( @path )
  end
end

这是链接到该控制器的链接:

<% @episodes.each do |x| %>
<p> <%= x %><%= link_to " Download", 
    {controller: 'download', action: 'index', title: @title, name: x } %> </p>
<% end %>

编辑: 我今天做了一些测试,发现如果我尝试发送较小的文件(文本或图像),下载链接会立即生效。我还注意到下载链接实际上也适用于电影,但下载开始需要 20-30 秒。你知道什么会导致这种延迟吗?

4

4 回答 4

4

你在使用涡轮链接吗?Turbolinks 显然不能很好地与 send_file ( https://github.com/rails/turbolinks/issues/182 ) 配合使用。尝试在 link_to 帮助器中添加“data: { no-turbolink: true }”(或“'data-no-turbolink'=>true”),例如:

<%= link_to "Downloadable File", downloadable_file, data: { no-turbolink: true } %>

另请参阅:Rails 4,资产管道导致用户可下载的文件被下载两次rails 不会发送数据作为文件Ruby on Rails 发送文件,控制器操作中的代码运行两次

于 2014-09-13T18:17:32.563 回答
0

编辑以反映下面的评论。我会简单地添加一个处理下载的问题,然后使用

include Concerns::Downloads

处理您的下载请求。routes.rb 看起来像这样。

resources :movies do
member do
  post 'download'
end

并且在视图中

  <%= link_to 'Download', {:controller => 'movies', :action => 'download'}, {:method => :post } %></a>
于 2014-05-08T12:51:09.737 回答
0

将文件移动到公用文件夹
仅将文件名添加到 link_to

<%= link_to "Downloadable File", "/"+filename, %>
于 2017-05-04T07:29:43.903 回答
-1

尝试将处置设置为附件send_file

class DownloadController < ApplicationController
  def index
    ...
    send_file( @path, :disposition => 'attachment' )
  end
end

问题可能是您的浏览器正在尝试打开文件本身 -:disposition => 'attachment'提示浏览器下载文件,即使它认为该文件是可以打开的。

于 2014-05-08T14:20:40.623 回答