Электронная таблица Ruby On Rails - проверка типа файла - PullRequest
1 голос
/ 17 июля 2011

Я использую камень rails Spreadsheet (http://spreadsheet.rubyforge.org/GUIDE_txt.html), чтобы импортировать данные Excel в мое приложение.

Я могу получить файл Excel для загрузки в порядке и использовать:

book = Spreadsheet.open filePath

, чтобы открыть файл

Это прекрасно работает, если файл является допустимым файлом Excel, но если мой пользователь решает загрузить файл случайного изображения или что-то еще, я получаю этоошибка:

Недопустимая подпись OLE2

Это понятно.

Я не могу найти способ проверить файл, прежде чем открыть его.сделать это по расширению файла, если я могу помочь, кто-нибудь знает способ проверить файл по типу содержимого, прежде чем я его открою?

Та, Джо

1 Ответ

2 голосов
/ 17 июля 2011

Существует несколько способов проверки типа файла, однако большинство из них заключается в проверке расширения файла.

Если вы не хотите этого делать и у вас есть доступ к «файлу»Команда, вы можете попробовать это:

class File
  def type_from_file_command
    type = (self.original_filename.match(/\.(\w+)$/)[1] rescue "octet-stream").downcase
    mime_type = `file -b --mime-type #{self.path}`.split(':').last.strip rescue "application/x-#{type}"
    mime_type = "application/x-#{type}" if mime_type.match(/\(.*?\)/)
    mime_type
  end
end

ruby-1.9.2-p290 :030 > a = File.open("/path/nube_minilogo.psd")
 => #<File:/path/nube_minilogo.psd> 
ruby-1.9.2-p290 :031 > a.type_from_file_command
 => "image/vnd.adobe.photoshop"

Адаптировано из скрепки.

...