Определить, изменил ли пользователь расширение файла для загрузки? - PullRequest
1 голос
/ 27 августа 2010

Используя сервлет Java, можно ли определить истинный тип файла независимо от его расширения?

Сценарий. Вы разрешаете загрузку только текстовых файлов (.txt и .csv). Пользователь берет файл mypicture.jpg, переименовывает его в mypicture.txt и продолжает загрузку файла. Ваш сервлет ожидает только текстовые файлы и взрывается, пытаясь прочитать JPG.

Очевидно, что это ошибка пользователя, но есть ли способ обнаружить, что это не обычный текст и не продолжить?

Ответы [ 4 ]

6 голосов
/ 27 августа 2010

Вы можете сделать это с помощью встроенного URLConnection#guessContentTypeFromStream() API.Тем не менее, он довольно ограничен в типах контента, которые он может обнаруживать, поэтому вы можете лучше использовать стороннюю библиотеку, такую ​​как jMimeMagic .

См. Также:

3 голосов
/ 27 августа 2010

Нет. Нет способа узнать, какой тип файла вы загружаете. Перед выполнением каких-либо действий с файлом вы должны выполнить все проверки на сервере.

1 голос
/ 28 августа 2010

Я думаю, вы должны подумать о том, почему ваша программа может взорваться, когда, скажем, в формате JPEG, и защитить ее от этого.Например, файл JPEG, вероятно, будет иметь очень длинные строки (любой LF из CR LF будет случайным образом распределен).Но так называемый текстовый файл может содержать длинные строки, которые могут убить вашу программу,

0 голосов
/ 27 августа 2010

Что именно вы подразумеваете под "простым текстовым файлом"?Будет ли файл, состоящий из китайского текста, простым текстовым файлом?Если вы предполагаете текст на английском языке в кодировке ASCII или ANSI, вам придется прочитать полный файл как двоичный файл и проверить, что, например, все байтовые значения находятся, скажем, между 32 и 127 плюс 13, 10, 9, возможно.

...