Как ограничить типы файлов, загружаемых в 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());