如何限制上传到Spring MVC3 Controller的文件类型

时间:2013-01-04 10:23:04

标签: java spring spring-mvc file-upload

我正在使用Spring MVC3来处理我的Web应用程序的文件上传。现在,我可以使用我的xml上下文文件中定义的以下配置来限制上传的文件大小:

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

我已经在网上搜索了如何限制文件类型但无济于事。我发现的大多数文章只教导如何限制文件大小而不是文件类型。 提前感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

尝试在控制器的请求处理程序方法中执行检查/路由:

@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";
        }
}

答案 1 :(得分:5)

您可以按文件类型限制文件上传,您可以扩展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>

答案 2 :(得分:2)

您可以创建用户定义的方法来执行此检查:

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

答案 3 :(得分:0)

您还可以检查Mime类型,并根据您可以限制用户上传文件 这里将使用JMimeMagic Library。

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