Как скачать файл с помощью send_file?

Может кто-нибудь просветить меня, как я могу скачать файл с send_file?

У меня есть файл image.jpg внутри app/assets/images. Я пробовал это в своем контроллере:

def download
    send_file ("#{Rails.root}/public/images/image.jpg")
end

def download
    send_file ("#{Rails.root}/assets/images/image.jpg")
end

def download
    send_file ("#{Rails.root}/images/image.jpg")
end

def download
    send_file ("/public/images/image.jpg")
end

def download
    send_file ("/assets/public/images/image.jpg")
end

def download
    send_file ("/assets/images/image.jpg")
end

Для каждого пути он говорит:

ActionController::MissingFile in HomeController#download
Cannot read file 'some_path'

В чем здесь может быть проблема? Спасибо!


person user3339562    schedule 25.02.2014    source источник


Ответы (4)


Пытаться:

IMAGES_PATH = File.join(Rails.root, "public", "images")

def download
  send_file(File.join(IMAGES_PATH, "image.jpg"))
end
person Coenwulf    schedule 25.02.2014
comment
Спасибо за предложение, но это то же самое. Не могу найти файл. - person user3339562; 25.02.2014
comment
У вас эта ошибка возникает, даже если файл image.jpg существует в каталоге /public/images? Возможно, попробуйте перезапустить сервер приложений. Это определенно должно работать. - person Coenwulf; 25.02.2014

хорошо, я предлагаю вам переместить файл в общую папку. В любом случае, сделай это

send_file(Rails.root.join('app' , 'assets', 'images', 'image.jpg'))
person Paritosh Piplewar    schedule 25.02.2014

Нам нужно указать тип шахты, чтобы она кэшировалась.

send_file ("#{Rails.root}/public"+image.image_path), :type => "image/jpeg", :disposition => 'inline'
person Gurudath BN    schedule 23.09.2014

Для тех, кто все еще ищет ответ, send_data и send_file не будут работать при ответе на вызовы ajax. Вместо этого попробуйте отправить форму или использовать <a href=..> для вызова метода контроллера и загрузки файла.

person corpico    schedule 01.06.2017