Spring MVC文件上传将null传递给控制器

时间:2017-06-26 15:53:32

标签: java spring-mvc file-upload

我有一个spring MVC应用程序,当我尝试上传多部分文件时, null 值会传递给控制器​​。所有其他文本参数仅正确传递文件一。我在项目中包含了MultipartResolver bean和commons-iocommons-fileupload个依赖项。我已经检查了它在浏览器的请求中传递但是它没有绑定在modelAttribute中。

这是我视图中的代码段

<form:form method="post" enctype="multipart/form-data" action="${pageContext.request.contextPath}/profile/secure/saveIdentity" commandName="profileModel">

    <span><b>Upload your passport photo</b></span>
    <form:input  path="passportPhotograph" type="file"  id="passportPhoto"/> 
</form:form>

这是我的控制器方法的片段

@RequestMapping(value = "/secure/saveIdentity", method = RequestMethod.POST)
public ModelAndView saveIdentity(@ModelAttribute("profileModel") @Valid ProfileModel profileModel,HttpServletRequest request){

    MultipartFile photo = profileModel.getPassportPhotograph();
    if(photo != null){ do something.... }
}

这是我的ProfileModel.java类代码段

public class ProfileModel{

    private MultipartFile passportPhotograph;

    public MultipartFile getPassportPhotograph() {
        return passportPhotograph;
    }

    public void setPassportPhotograph(MultipartFile passportPhotograph) {
        this.passportPhotograph = passportPhotograph;
    }
    ............
}

在我的dispatcher-servlet文件中,我声明了MultipartResolver bean:

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

最后在我的build.gradle文件中添加了这些依赖项

compile('commons-io:commons-io:2.0.1')
compile('commons-fileupload:commons-fileupload:1.3.1')

在所有这一切之后它将null传递给我的控制器,即使它包含在HttpServletRequest中。我该怎么做才能解决这个问题。在此先感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您需要使用phpunit.xml

答案 1 :(得分:1)

使用Spring Web框架附带的StandardServletMultipartResolver解决了我的问题。但是你必须使用Servlet版本3.0+才能工作。

答案 2 :(得分:0)

此示例代码。 point是模型中的输入标签名称绑定文件。也许你需要库json和文件。 ex)commons-io,commons-fileupload和jackson,gson用于在控制器中解析。

<强> HTML

<form:form method="post" enctype="multipart/form-data" action="${pageContext.request.contextPath}/profile/secure/saveIdentity">

    <span><b>Upload your passport photo</b></span>
    <form:input type="file"  name="file"/> 
</form:form>

<强>控制器

@RequestMapping(value = "test", method = RequestMethod.POST)
public String testFormData(FileAndContentModel model) {
   // break point and check model.

   return "success";
}

<强>模型

public class FileAndContentModel {

    private MultipartFile file;

    public FileAndContentModel () {
    }

     // getter, setter


}

答案 3 :(得分:0)

这不是解决方案,我只是在这里输入,因为它比评论更容易阅读。请尝试最低限度的requeriment,只需上传文件并验证是否有效。

形式:

<form:form method="post" enctype="multipart/form-data" action="${pageContext.request.contextPath}/profile/secure/saveIdentity">
    <span><b>Upload your passport photo</b></span>
    <input  name="file" type="file"  id="passportPhoto"/> 
</form:form>

控制器:

@RequestMapping(value = "/secure/saveIdentity", method = RequestMethod.POST)
public void saveIdentity(@RequestParam("file") MultipartFile file) {
    //please verify here if the file is null