Как проверить формат загруженного файла - PullRequest
2 голосов
/ 27 октября 2011

Мой сервер может хранить файлы с расширением * .pdf.Стоит ли проверять формат файла или правильного расширения достаточно?

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Расширение недостаточно, чтобы доказать, что файл имеет правильный формат. Вы можете назвать что угодно .pdf. Именно при открытии и чтении файла проверяется форматирование (либо самим приложением, либо какими-либо другими средствами проверки).

0 голосов
/ 28 октября 2011

Большое спасибо, Боб! Ваше решение великолепно. Я анализирую удаленный файл и немного изменяю ваш reg exp:

file_url = 'http://...../file_name.pdf'
file = open(file_url)
contents = file.read(10)
is_pdf = (contents =~ /\%PDF-\d+\.?\d+/) == 0
render :text => is_pdf
0 голосов
/ 28 октября 2011

Shadowland прав, быстрая проверка сэкономит много боли позже. Если бы я получал десять центов за каждый раз, когда клиент говорил: «Я использовал PDF. Я взял свой файл Word, изменил имя на« pdf »и отправил его по почте!» Мне бы хватило на чашку кофе.

Вот быстрая проверка, если вы не хотите использовать полноценный гем обработки PDF во время загрузки. Согласно спецификации Adobe Adobe , каждый файл PDF должен начинаться с

%PDF−<version-number>

Например, файл PDF версии 1.7 начинается с

%PDF−1.7

Без чрезмерного проектирования решения, ориентированного на будущее (что произойдет, когда мы достигнем спецификации PDF версии 10.0?), Я попробую прочитать начало файла и убедиться, что он имеет форму ...

%PDF-<digit>.<digit>

Или, чтобы написать это в Ruby (используя блоки с ошибками и регулярные выражения,) ...

contents = File.open('Full_path_to_my_file', 'r') { |f| f.read(8)}
is_pdf = (contents =~ /\%PDF-\d\.\d/) == 0
...