在我的Rails 5.2应用程序中,我有这个控制器,它将带有token
参数的下载链接发送给用户:
class ArchivesController < ApplicationController
def new
# Create and email download link
end
def show
archive = Archive.valid.find_by(:token => params[:id])
if archive
redirect_to rails_blob_path(archive.file)
else
flash[:notice] = "Invalid link!"
redirect_to root_path
end
end
end
这可以正常工作并正确重定向到Rails的rails_blob_path
提供的ActiveStorage。
让我烦恼的是,单击下载链接不仅会download文件,还会打开一个新的(空白!)浏览器选项卡。我猜这是由于我的控制器操作中的redirect引起的吗?
有什么方法可以防止浏览器打开空白的浏览器标签?在我看来,这不是必需的,可能会使用户感到困惑。
在我的应用程序的先前版本中,我直接将rails_blob_path
放在电子邮件中,并且在未打开新浏览器标签的情况下触发了下载。但是,出于安全原因,我不喜欢这种方法,也没有办法使已下载的记录无效或过期。
如果您只需要下载链接,则无需执行控制器操作。您认为redirect_to
是空白页的原因是正确的。
您可以简单地将链接的处理方式设置为attachment
...类似这样的内容...
<%= link_to rails_blob_path(your_object, disposition: "attachment") %>