从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
注意任何有用的答案如果有其他工作方式也欢迎:)
感谢任何帮助,谢谢:)
答案 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>