Как создать ссылку для скачивания
Какой лучший способ создать ссылку для загрузки? Есть ли лучший способ, чем следующее?
Я думал использовать link_to "Download", :controller => ..., :action => ...", :id => ...
в представлении.
Добавление match /documents/download/:id => documents#download
в route.rb
И в контроллере:
def download
send_file ...
end
Кроме того, я хотел бы, если это возможно, чтобы пользователь оставался на той же странице, что и ссылка.
Спасибо.
Ответы
Ответ 1
Я добавляю действие загрузки как спокойный маршрут в блоке ресурсов. Здесь типичный код для меня:
routes.rb
resources :things do
member do
get :download
end
end
Модель:
has_attached_file :document,
:path => ':rails_root/assets/documents/:id/:basename.:extension'
attr_protected :document_file_name, :document_content_type, :document_file_size
контроллер:
def download
send_file @thing.document.path, :type => 'application/pdf', :filename => @thing.permalink
end
Вид:
<%= link_to 'Download', download_thing_path(@thing) %>
Это держит пользователя на той же странице и только начинает загрузку с моим предложенным именем (я использую permalink).
Что вы подразумеваете под динамическим сгенерированием? Они загружены вами или созданы вашим приложением на лету?
Ответ 2
Вы можете просто добавить свою логику загрузки в свое действие show и дать ей:
<%= link_to "Download", document_path(document) %>
Я почти уверен, что метод link:/controller/: action/: id не одобряется.
Ответ 3
Я только что создал ссылку Download.mp3 и использовал ее в моем файле .htaccess.
<Files *.mp3>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
Я нашел, что это проще, чем любое другое решение.