18

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

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

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

4

4 回答 4

8

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

@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";
        }
}
于 2013-01-04T10:28:53.953 回答
6

您可以通过文件类型限制文件上传,您可以扩展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>
于 2013-01-04T10:53:33.300 回答
5

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

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

并检查条件:

if (!fileExtensions.contains(substring.toLowerCase()))
    //reject logic
else
    //accept logic
于 2016-08-19T11:31:08.387 回答
1

您还可以检查 Mime 类型,并据此限制用户上传 JMimeMagic 库将在此处使用的文件。

MagicMatch match = Magic.getMagicMatch(file.getBytes());
        System.out.println(match.getMimeType());
于 2015-10-14T07:04:26.340 回答