Spring MVC Upload File - Как определяется тип контента? - PullRequest
6 голосов
/ 24 августа 2011

Я использую возможность Spring 3 для загрузки файла.Я хотел бы знать лучший способ проверить, что файл имеет определенный тип, в частности, файл CSV.Я уверен, что проверка расширения бесполезна, и в настоящее время я проверяю тип содержимого загружаемого файла.Я просто гарантирую, что он имеет тип "text / csv".И просто чтобы уточнить, что это файл, загруженный клиентом, это означает, что я не контролирую его происхождение.

Мне интересно, как Spring / браузер определяет тип контента?Это лучший / самый безопасный способ определить, какой тип файла был загружен?Могу ли я когда-нибудь быть на 100% уверенным?

ОБНОВЛЕНИЕ: Опять же, меня не интересует, как определить тип содержимого файла, но как определить тип содержимого.Как Spring / браузер узнает, что тип контента - это «text / csv» на основе загруженного файла?

Ответы [ 5 ]

1 голос
/ 25 августа 2011

Таким образом, вы также можете подсчитать количество запятых в файле на строку. Обычно в каждой строке файла должно быть одинаковое количество запятых, чтобы он был действительным файлом CSV.

1 голос
/ 24 августа 2011

Вы можете использовать

org.springframework.web.multipart.commons.CommonsMultipartFile объект.

у него есть метод getContentType();.

Посмотрите на следующий пример http://www.ioncannon.net/programming/975/spring-3-file-upload-example/

, вы можете просто добавить простой тест на объект CommonsMultipartFile и перенаправить на страницу ошибки, если онневерный тип контента.

0 голосов
/ 22 октября 2015

Насколько мне известно, метод getContentType(String) получает свое значение от всего, что говорит пользовательский агент, так что вы правы, чтобы быть осторожным, поскольку это может быть легко подделано.

Для двоичных файлов вы можете проверить магическое число или использовать библиотеку, такую ​​как mime-util или jMimeMagic . Начиная с Java 7 Files.probeContentType(String), но он работает только с файлами на диске, и в некоторых ОС сообщалось об ошибках.

0 голосов
/ 26 августа 2011

Хорошо, в этом случае я предлагаю вам использовать Java-библиотеку Csvreader. Вам просто нужно проверить ваш объект csvreader и все.

0 голосов
/ 24 августа 2011

Почему вы не просто берете имя файла в свой валидатор и разделяете его, тип файла - fileName.split ("\.") [Filename.length () - 1] string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...