Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC文件上载:无法处理部件,因为未提供多部件配置_Java_Spring Mvc_Upload - Fatal编程技术网

Java Spring MVC文件上载:无法处理部件,因为未提供多部件配置

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

我试图使用SpringMVC和Thymeleaf上传一个文件,但我得到一个异常,说没有提供多部分配置

这是我的百里香表格:

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

看看