2013-07-13 2 views
4

Вопроса:рельсов + carrierwave S3: силы link_to для загрузки

Я хотел бы, чтобы заставить link_to для загрузки изображений и PDF-файлов, получаемые из S3, а не открывать их в окне браузера.

link_to File.basename(asset.attachment.path), asset.attachment_url.to_s 

Я искал решения, но только те, которые я нашел, должны обрабатывать его в контроллере, используя send_file или send_data, но это не работает для меня. Наконец я наткнулся на решение в источниках Carrierwave.

ответ

5

Это то, что отлично работает. «Реакция-контента диспозиция» использовать в качестве параметра URL-адрес

link_to File.basename(asset.attachment.path), asset.attachment_url(:query => {"response-content-disposition" => "attachment"}).to_s 

Найти больше вариантов здесь: https://github.com/carrierwaveuploader/carrierwave/blob/5aec4725a94fca2c161e347f02b930844d6be303/lib/carrierwave/uploader/versions.rb (строка 185)

+1

Это будет работать только с подписанными запросами. –

+0

Примечание вместо File.basename (..) вы можете заменить на file_identifier –

+0

Это решение не сработало для меня. Код ниже, кажется, игнорирует расположение и перенаправляет всю страницу, а не просто загружает файл. 'link_to attachment.file_identifier, attachment.file_url (: query => {" content-disposition "=>" attachment "}). To_s' –

5

Вы можете по умолчанию это для всех файлов определенного пользователя путем добавления метода fog_attributes ,

например.

# your_uploader.rb 
def fog_attributes 
    {'Content-Disposition' => "attachment"} 
end 

Это работает с запросами, которые также не подписаны!

+0

Для меня это работало как прелесть. Thxs! –