Подтвердить что ты не робот

Carrierwave как получить расширение файла

Я разрабатываю приложение Ruby on Rails, которое требует загрузки/загрузки файлов. Для загружаемой части я использовал несущую полосу gem, поскольку она очень проста в использовании и гибкости. Проблема заключается в следующем: после того, как я загрузил файл, мне нужно знать несколько вещей: например, если он вместо того, чтобы загружать файл, я показываю его в строке, и то же самое касается изображения. Как получить расширение файла и как я могу сделать это отправить файл пользователю? Любая обратная связь приветствуется Спасибо!

4b9b3361

Ответ 1

Определить расширение файла (я полагаю, что имя для подключенного загрузчика - это файл):

file = my_model.file.url
extension = my_model.file.file.extension.downcase

Затем подготовьте mime и disares vars:

disposition = 'attachment'
mime = MIME::Types.type_for(file).first.content_type

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf"
  disposition = 'inline'
end

(добавьте другие расширения, если хотите).

И затем отправьте файл:

send_file file, :type => mime, :disposition => disposition

Ответ 2

После того, как вы загрузили файл, имя будет сохранено в базе данных. Это также включает расширение. Предполагая, что у вас есть модель User с загрузчиком, установленным как asset, вы можете получить ее как:

user.asset.file.extension

Что касается отправки его пользователю, если вы вызываете user.asset_url, он даст вам URL-адрес, в который загружается файл. Пользователь может использовать эту ссылку для получения файла. Или я не понимаю, что вы подразумеваете под "отправкой файла пользователю"?