无法从弹簧形式获取图像

时间:2016-10-01 11:37:08

标签: java spring spring-mvc file-upload

spring form获取文件时我获得了null值,如果我在其余字段中尝试此代码,则表示 multipart input types其工作正常。在调试时我从行获得null值。如果我尝试从现有文件夹中获取image我在webapp下的图像,并且该网址能够在浏览器中显示图像,但无法使用浏览器从files读取值并抱歉我的英文不好< / p>

编辑如果我评论图片代码,应用程序工作正常但是当我介绍图像代码时我收到错误

MultipartFile file = domain.getImage(); //this is getting null

这是相关代码 的控制器

@RequestMapping(value = "/form", method = RequestMethod.GET)
    public String formInputGet(Model model) {
        model.addAttribute("domain", new Domain());
        return "form";
    }



@RequestMapping(value = "/form", method = RequestMethod.POST)
        public String formInputPost(@ModelAttribute("domain") Domain domain, HttpServletRequest httpServletRequest) {

            MultipartFile file = domain.getImage();
if (image== null)
            throw new NullPointerException("unable to fetch "+file); //getting NPE everytime
            String rootDirectory = httpServletRequest.getSession().getServletContext().getRealPath("/");
            if (domain.getImage() != null && !domain.getImage().isEmpty())
                try {
                    File path = new File(rootDirectory + "images\\" + domain.getFirstName() + ".png");
                    file.transferTo(path);
                } catch (IllegalStateException | IOException e) {
                    e.printStackTrace();
                }
            repositiry.addToList(domain);
            return "redirect:/";
        }

form.jsp

<form:form modelAttribute="domain" enctype="multipart/form-data">
    First Name<br>
        <form:input path="firstName" />
        <br>Last Name :<br>
        <form:input path="lastName" />
        <br>upload Image<br>
        <form:input path="image" type="file" />
        <hr>
        <input type="submit">
    </form:form>

DispatcherServlet的

<mvc:annotation-driven />
    <mvc:resources location="/images/" mapping="/images/**" />
    <context:component-scan base-package="com" />
    <bean id="multipartReslover"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10240000" />
    </bean>
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

我添加了一些额外的代码来查找我是否domain因为null变为现实。我不知道如何解决这个问题。

添加检查文件后我收到错误

java.lang.NullPointerException: unable to fetch : null

domain.java

public class Domain {
    private String firstName;
    private String lastName;
    private MultipartFile image;

//getters and setters

注意任何有用的答案如果有其他工作方式也欢迎:)

感谢任何帮助,谢谢:)

3 个答案:

答案 0 :(得分:5)

你应该做所有事情@kuhajeyen说,如果从域对象获取图像不顺利你可以试试这个

public String formInputPost(@ModelAttribute("domain") Domain domain,
                            @RequestParam("image") MultipartFile imagefile,
                            HttpServletRequest httpServletRequest ) {

                            imagefile.transferTo(path);

                            }

修改: - 将method属性更改为表单内的POST,否则会发出GET请求。

<form:form modelAttribute="domain" method="post" enctype="multipart/form-data">

并用此行替换您的输入类型文件,我认为尝试将输入类型文件与对象绑定时存在一些问题。

<input type="file" name="image" />

答案 1 :(得分:3)

我的配置文件中有两个拼写错误,因为它们是

1)<mvc:resources location="/images/" mapping="/images/**" />此处的映射应该与mapping ="images/**"

类似

2)File path = new File(rootDirectory + "images\\" + domain.getFirstName() + ".png");这里的路径应该是rootDirectory+"\\images\\"+....而不是

答案 2 :(得分:2)

你需要告诉spring,如何解决多部分文件

添加此bean

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

而且似乎你还没有在表单中映射你的行动

<form:form modelAttribute="domain" enctype="multipart/form-data" action="xxxx/form">
....

</form:form>