Использование send_file в рельсах
Я отправляю файл ms-word с использованием рельсов.
i.e, когда я нажимаю на ссылку, отправляется файл doc из папки tmp (в проекте).
Код, который я использую,
@filename ="#{RAILS_ROOT}/tmp/test/test.doc"
send_file(@filename ,
:filename => "test",
:type => 'application/msword',
:disposition => 'attachment',
:streaming => 'true',
:buffer_size => '4096')
Он работает, но он отправляет пустой файл. Содержимое отсутствует в файле. Любые предложения?
Ответы
Ответ 1
Нет send_file: потоковая опция: stream. Вы передаете неправильные типы параметров.: buffer_size должен быть числом, а не строкой.: поток должен быть логическим, а не строковым.
:stream => true,
:buffer_size => 4096,
Вам нужен только параметр имени файла (если вы хотите отправить файл с другим именем, кроме оригинала). Другие параметры, которые вы используете, по умолчанию (кроме: type).
Вы можете попробовать это?
@filename ="#{RAILS_ROOT}/tmp/test/test.doc"
send_file(@filename, :filename => "test.doc")
Ответ 2
прокомментируйте следующую строку в config/environments/production.rb
config.action_dispatch.x_sendfile_header = "X-Sendfile"
Ответ 3
Попробуйте отправить с помощью: disposition = > 'inline'
send_file path, :type => 'application/msword', :disposition => 'inline'
Ответ 4
In your view =>
<%= link_to "click here to download", signed_feeds_pdf_path(:feed_image_path => feed_image.feedimage.path), target: '_self' %>
In your controller =>
def pdf
file_name = params[:feed_image_path].split('/').last
@filename ="#{Rails.root}/public/uploads/feed_image/feedimage/#{file_name}"
send_file(@filename ,
:type => 'application/pdf/docx/html/htm/doc',
:disposition => 'attachment')
end