Java Spring MVC文件上载:无法处理部件,因为未提供多部件配置
我试图使用SpringMVC和Thymeleaf上传一个文件,但我得到一个异常,说没有提供多部分配置 这是我的百里香表格:Java Spring MVC文件上载:无法处理部件,因为未提供多部件配置,java,spring-mvc,upload,Java,Spring Mvc,Upload,我试图使用SpringMVC和Thymeleaf上传一个文件,但我得到一个异常,说没有提供多部分配置 这是我的百里香表格: <form action="#" th:action="@{/settings/profile}" th:object="${profileSettingsForm}" method="POST" enctype="multipart/form-data"> <div class="form-group"> <l
<form action="#" th:action="@{/settings/profile}"
th:object="${profileSettingsForm}" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="profilePicture">Picture</label> <input type="file"
th:field="*{profilePicture}" id="profilePicture" name="profilePicture">
</div>
<div class="form-group">
<label for="username">Username</label> <input type="text"
th:field="*{username}" class="form-control" id="username"
placeholder="Type your new username">
</div>
<div class="form-group">
<label for="biography">Biography</label>
<textarea th:field="*{biography}" class="form-control" id="biography"
rows="3" placeholder="Type your new biography"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
此外,我还按照我的WebMvcConfig.java
中的文档所述配置了多部分解析器,如下所示:
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
resolver.setMaxUploadSize(10000);
return resolver;
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(getMultipartConfigElement());
}
为什么即使我已经设置了MultiPartResolver,上传表单也不起作用?我漏了什么吗?我终于把它修好了。对于存在相同问题的任何人,解决方案是在my
WebAbbInitializer.java
中注册多部分配置,添加以下自定义方法:
private static final String LOCATION = "C:/temp/"; // Temporary location where files will be stored
private static final long MAX_FILE_SIZE = 5242880; // 5MB : Max file size.
// Beyond that size spring will throw exception.
private static final long MAX_REQUEST_SIZE = 20971520; // 20MB : Total request size containing Multi part.
private static final int FILE_SIZE_THRESHOLD = 0; // Size threshold after which files will be written to disk
private MultipartConfigElement getMultipartConfigElement() {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement(
LOCATION, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
return multipartConfigElement;
}
最后,将其注册到同一文件中,如下所示:
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
resolver.setMaxUploadSize(10000);
return resolver;
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(getMultipartConfigElement());
}
您可以阅读有关的更多信息。从没有找到多部件配置的例外情况可以直接看出。尽管您已经提供了多部分解析器bean 问题是,当在Spring安全过滤器之前指定MultipartFilter时,它试图获取multipartResolverbean,但找不到它。因为它期望bean名称/id为filterMultipartResolver而不是multipartResolver 帮你自己一个忙。请更改bean配置,如下所示-
@Bean
public CommonsMultipartResolver filterMultipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
resolver.setMaxUploadSize(10000);
return resolver;
}
或
看看