Как ограничить типы файлов, загружаемых в Spring MVC3 Controller

Я использую Spring MVC3 для обработки загрузки файла для своего веб-приложения. На данный момент я могу ограничить размер загружаемого файла, используя следующую конфигурацию, определенную в моем XML файле:

<beans:bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <beans:property name="maxUploadSize" value="200000"/> 
</beans:bean>

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

Ответ 1

Попробуйте выполнить проверку/маршрутизацию в методе обработчика запроса контроллера:

@RequestMapping("/save")
public String saveSkill(@RequestParam(value = "file", required = false) MultipartFile file) {   
        if(!file.getContentType().equalsIgnoreCase("text/html")){
            return "normalProcessing";
        }else{
            return "redirect: /some/page";
        }
}

Ответ 2

Вы ограничиваете загрузку файлов по типам файлов, вы можете расширить класс org.springframework.web.multipart.commons.CommonsMultipartResolver. И добавьте метод проверки типа содержимого файла или типа файла с помощью MultipartFile.

Укажите типы файлов, те, которые вы хотите ограничить в конфигурации, например -

 <beans:bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <beans:property name="maxUploadSize" value="200000"/> 
    <beans:property name="restrictFileTypes" value="html,pdf,..."/> 
</beans:bean>

Ответ 3

Вы можете создать пользовательский метод для выполнения этой проверки:

String fileExtentions = ".exe,.dmg,.mp3,.jar";
fileName = multipartFile.getOriginalFilename();
int lastIndex = fileName.lastIndexOf('.');
String substring = fileName.substring(lastIndex, fileName.length());

И проверьте условие:

if (!fileExtentions.contains(substring))
    //logic
else
    //logic

Ответ 4

Вы также можете проверить тип Mime и в соответствии с этим вы можете ограничить пользователя загрузкой файлов Здесь будет использована библиотека JMimeMagic.

MagicMatch match = Magic.getMagicMatch(file.getBytes());
        System.out.println(match.getMimeType());