如何使用Spring MVC添加多部分配置

时间:2015-07-03 15:59:40

标签: java spring spring-mvc servlets multipart

我尝试使用 Spring 将多部分文件发送到控制器,当我将数据发布到URL时,我收到此错误:

  

由于未提供多部件配置,因此无法处理部件。

我到处都搜索过,我的问题仍未解决......我不知道自己做错了什么。

以下是我的一些代码:

上传控制器

@Controller
public class UploadController {

        @RequestMapping(value="/upload", method= RequestMethod.GET)
    public @ResponseBody String provideUploadInfo() {
        return "You can upload a file by posting to this same URL.";
    }

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(MultipartHttpServletRequest request, Principal principal){


        User activeUser = principal == null ? null
                : (User) ((Authentication) principal).getPrincipal();


       return "whatever";
    }
}

应用-servlet.xml中

<bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

        <!-- one of the properties available; the maximum file size in bytes -->
        <property name="maxUploadSize" value="100000"/>
</bean>

似乎我有需要放入的全部内容。我在Tomcat 8服务器上运行此应用程序。

修改

根据Sotirios Delimanolis和zeroflagL提供的提示,我的代码已更新。

我做了几次测试,当我尝试上传比限制允许的更大的文件时,我明白了:

  

超过最大上传大小100000字节;嵌套异常是org.apache.commons.fileupload.FileUploadBase $ SizeLimitExceededException:请求被拒绝,因为它的大小(229305)超过了配置的最大值(100000)

这意味着multipartResolver已成功到达,不是吗?

但是,我仍然没有 没有提供多部分配置文件 错误。怎么可能呢?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我的问题通过以下步骤解决了:

第1步:

要使用 CommonsMultipartResolver 处理文件上传,我们需要添加以下依赖项:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
     <version>1.3.1</version>
</dependency>

第二步:

现在我们可以在我们的Spring配置中定义CommonsMultipartResolver bean。

此MultipartResolver带有一系列set方法,用于定义属性,例如上传的最大大小:

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(100000);
    return multipartResolver;
}

第3步:

<form:form method="POST" action="/spring-mvc-xml/uploadFile" enctype="multipart/form-data">
        <table>
            <tr>
                <td><form:label path="file">Select a file to upload</form:label></td>
                <td><input type="file" name="file" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="Submit" /></td>
            </tr>
        </table>
    </form>

第四步:

我们可以从控制器方法内的request参数中检索此变量:

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public String submit(@RequestParam("file") MultipartFile file, ModelMap modelMap) {
        modelMap.addAttribute("file", file);
        return "fileUploadView";
    }