Java 无法从spring窗体获取图像

Java 无法从spring窗体获取图像,java,spring,spring-mvc,file-upload,Java,Spring,Spring Mvc,File Upload,从spring表单获取文件时,我得到的是null值,如果我对其余字段尝试此代码,则表示非多部分输入类型工作正常。调试时,我从第行获得null值。如果我试图从现有文件夹中获取图像,即webapp下的图像,并且该url能够在浏览器中显示图像,但无法使用浏览器从文件读取值,很抱歉我的英语不好 编辑如果我对图像代码进行注释,则应用程序工作正常,但当我为图像引入代码时,会出现错误 java.lang.NullPointerException: unable to fetch : null Multipa

spring表单
获取文件时,我得到的是
null
值,如果我对其余字段尝试此代码,则表示非
多部分输入类型
工作正常。调试时,我从第行获得
null
值。如果我试图从现有文件夹中获取
图像
,即webapp下的图像,并且该url能够在浏览器中显示图像,但无法使用浏览器从
文件
读取值,很抱歉我的英语不好

编辑如果我对图像代码进行注释,则应用程序工作正常,但当我为图像引入代码时,会出现错误

java.lang.NullPointerException: unable to fetch : null
MultipartFile file=domain.getImage()//这将变为空

这是相关代码 控制器

@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>
domain.java

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

//getters and setters
注意如果有其他工作方式,欢迎提供任何有用的答案:)


感谢您的帮助:)

您需要告诉spring如何解析多部分文件

加入这个豆子

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

....

你应该按照@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)
这里的映射应该类似于
mapping=“images/**”


2)
File path=新文件(rootDirectory+“images\\”+domain.getFirstName()+“.png”)此处路径应为
rootDirectory+“\\images\\”+..
相反

好吧,直到我了解到操作将使用映射重定向到其他servlet,但在这里它将被重定向到哪里?@kuhejeyan我尝试了你的方法,但你能告诉我重定向表单的位置吗?@HelloWorld如果你想重定向到同一页,你可以重定向到同一页,但我猜你正在查找要发布到的确切表单url,如果是这样的话,那将是formInputPost的操作urlmethod@kuhaheyan实际问题是我应用了一个
NPE
,并且它显示为真。请检查我对codeiapplied
NPE
的更新,在方法开始后立即检查,结果是真的,但是
@requestParm(…)
将获取
http
请求,而我甚至无法从表单中获取值。表单中缺少
method=“post”
属性,这就是为什么您无法从请求中获取值。但是,当我在不使用
post
的情况下尝试相同的方法时,我能够获取其余参数,当我添加
multipart
仍获取空值时,它将失败扫描您的域class@kuhajeyan我做了编辑你能改成公共字符串formInputPost吗(@modeldattribute(“domain”)domain domain,BindingResult){…}来自公共字符串formInputPost(@modeldattribute(“domain”)domain domain,HttpServletRequest HttpServletRequest){..}好的,我将尝试绑定它们all@kuhajeyan我绑定了所有结果,然后将其添加到我的
formdatapost(..)
控制器中,但它仍在传递到其他部分
<input type="file" name="image" />