为什么我的电子邮件下载链接会打开一个新的浏览器标签?

问题描述 投票:0回答:1

在我的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放在电子邮件中,并且在未打开新浏览器标签的情况下触发了下载。但是,出于安全原因,我不喜欢这种方法,也没有办法使已下载的记录无效或过期。

ruby-on-rails ruby rails-activestorage
1个回答
0
投票

如果您只需要下载链接,则无需执行控制器操作。您认为redirect_to是空白页的原因是正确的。

您可以简单地将链接的处理方式设置为attachment ...类似这样的内容...

<%= link_to rails_blob_path(your_object, disposition: "attachment") %>
© www.soinside.com 2019 - 2024. All rights reserved.