Verify file type in Ruby
Posted: February 27th, 2010 | Author: admin | Filed under: Uncategorized | Tags: extension, file, mime, mime-types, ruby, ruby on rails, validate | No Comments »I was unable to find anything quite like this in Google, so I had to make one. When validating a file type, you don’t want to resort to telling your user a file is the wrong format when they think is. If for some reason a user’s file doesn’t contain an extension, you should check the mime type as a last resort. Linux and Mac users may often not use file extensions. Note that if you are doing this for security reasons, you should check both the extension and mime-type instead of one or the other.
Here was my solution for checking to see if a file was a document for a Recruiting web site. Note that you will need MIME::Types which is included by default in Ruby on Rails.
def is_document?(file)
extensions = %w( pages pdf doc docx rtf txt odt )
# used http://filext.com/ for mime types
mimetypes = %w( application/pdf application/x-pdf application/acrobat applications/vnd.pdf text/pdf text/x-pdf
application/doc appl/text application/vnd.msword application/vnd.ms-word application/winword application/word application/x-msw6 application/x-msword
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/rtf application/x-rtf text/rtf text/richtext application/msword application/x-soffice
text/plain application/txt browser/internal text/anytext widetext/plain widetext/paragraph
application/vnd.oasis.opendocument.text application/x-vnd.oasis.opendocument.text
application/x-iwork-pages-sffpages )
if file.include?('.')
return extensions.include? file[ file.rindex('.')+1, file.length ]
else
return mimetypes.include? MIME::Types.of( file ).to_s
end
end