#ruby-on-rails #ruby #digital-ocean
#ruby-on-rails #ruby #digital-ocean
Вопрос:
Я пытаюсь создать ссылку / кнопку для загрузки в моем приложении Rails, чтобы пользователи могли загружать файлы из моего пространства Digitalocean. Я хочу иметь возможность нажать кнопку загрузки на моей странице показа и загрузить файл. Вот что я пробовал до сих пор:
samples_controller.rb
def show
@sample = Sample.find(params[:id])
data = open(@sample.audio_url)
@sample_download = send_data data.read, filename: @sample.audio.metadata["filename"], type: @sample.audio.metadata["mime_type"], disposition: 'inline'
end
show.html.erb
<%= link_to "Download Sample", @sample_download %>
Когда я загружаю страницу показа, открывается страница, которая воспроизводит аудиофайл. Я хочу, чтобы мой шаблон показа отображался как обычно, и мог щелкнуть ссылку для загрузки файла. Может быть, у меня должен быть отдельный download_sample
метод, я не уверен.
Ответ №1:
Вы можете запустить загрузку на стороне браузера, используя download
атрибут <a>
тега.
Все, что вам нужно, это что-то вроде <a href="http://linktofile.com/audio.mp3" download>Download</a>
, и пользователь может нажать на ссылку для загрузки.
Используя помощник Rails, вы можете сделать <%= link_to "Download", @sample.audio_url, download: true %>
Комментарии:
1. Это все равно просто открывает страницу, которая воспроизводит аудиофайл, вместо того, чтобы оставаться на странице показа и загружать файл.
2. Современные браузеры должны учитывать этот
download
атрибут. Если это не сработает, вам может потребоваться проверить правильность вашего вывода HTML. Вы можете проверить пример W3school
Ответ №2:
Привет для контента с другого веб-сайта убедитесь, что ссылка является прямой ссылкой. Если данные, которые вы хотите загрузить, находятся в активном хранилище, посмотрите rails_blob_path
(здесь ) .
В вашей модели
Class Sample < ApplicationRecord
has_one_attached :data
end
В вашем контроллере
class SampleController < ApplicationController
def show
@sample = Sample.find(params[:id])
@sample_download = rails_blob_path(@sample.data, disposition: 'attachment')
end
end
В ваших представлениях
<%=link_to "Download", @sample_download %>
Комментарии:
1. Спасибо за ответ. На самом деле я использую Shrine для загрузки в DO Spaces, а не в Active Storage.