Почему моя ссылка для скачивания электронной почты открывает новую вкладку браузера? - PullRequest
0 голосов
/ 25 января 2020

В моем приложении 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]) # Check if archive is still valid or has already expired
    if archive
      redirect_to rails_blob_path(archive.file)
    else
      flash[:notice] = "Invalid link!"
      redirect_to root_path
    end
  end

end

. Это работает и правильно перенаправляет на rails_blob_path, который предоставляется Rails ' ActiveStorage .

Что меня беспокоит, так это то, что нажатие на ссылку загрузки не только загрузит файл, но и откроет новую (пустую!) Вкладку браузера. Я полагаю, это связано с перенаправлением в моем действии контроллера?

Есть ли способ запретить браузерам открывать пустую вкладку браузера? На мой взгляд, это не обязательно и может сбить с толку пользователя.

В предыдущей версии моего приложения я поместил rails_blob_path непосредственно в электронное письмо, и загрузка была запущена без открытия новой вкладки браузера. Однако мне не понравился такой подход по соображениям безопасности, и не было никакого способа сделать недействительными или истек срок действия уже загруженных записей.

1 Ответ

1 голос
/ 25 января 2020

Если все, что вам нужно, это ссылка для скачивания, то действие контроллера не требуется. Вы правы, предполагая, что redirect_to является причиной пустой страницы.

Вы можете просто установить расположение ссылки на attachment ... как-то так ...

<%= link_to "Download", rails_blob_path(your_object, disposition: "attachment") %>
...