å°æä»¶ä»è¡¨åæ°æ®ä¸ä¼ å°Springæå¡å¨æ¶åºé
问题描述:
我使用form-data
将客户PC上的图片上传到Spring MVC服务器。将文件从表单数据上传到Spring服务器时出错
更新页:
<!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Spring MVC - Upload File</title> </head> <body> <form id="form1" method="post" action="/upload" enctype="multipart/form-data" accept-charset="utf-8"> <!-- File input --> <input name="file" id="file" type="file" /><br/> <input type="submit" value="Upload" /> </form> </body> </html>
这是春控制器
@RequestMapping(value = "upload", method = RequestMethod.POST) public @ResponseBody String provaUpdate(MultipartHttpServletRequest request,Principal p,HttpServletResponse response)throws IOException { String result=""; LocalFileManager mLocalFileManager = LocalFileManager.get(); Iterator<String> iterator = request.getFileNames(); while(iterator.hasNext()) { System.out.println("iterator.next()="+iterator.next()); } System.out.println("request.getFileMap().isEmpty()??"+request.getFileMap().isEmpty()); // mLocalFileManager.saveLocalData(g,g.getPicturesCount(), request.getFile("new").getInputStream()); return result; }
所以,当我运行,它只是打印:
request.getFileMap().isEmpty()??true
然后,没有文件似乎被上传,但如果我得到的request.getInputStream()
我可以写一个TXT文件表明:
------WebKitFormBoundaryWG8vA5PuTFFxPBqK Content-Disposition: form-data; name="file"; filename="1.jpg" Content-Type: image/jpeg �� JFIF ��ICC_PROFILE 蠠 mntrRGB XYZ ٠ $ acsp �� ӭ )B9 desc D ybXYZ bTRC Ԡ dmdd ࠠ ɧXYZ h gTRC Ԡ lumi | meas //(Symbols) Long ETC, so the picture is sent !! ------WebKitFormBoundaryWG8vA5PuTFFxPBqK--
所以,看来,图片发送正确,但MultipartHttpServletRequest
无法获取文件。
这是我的错误?
答
错误是我与Thymeleaf一起工作,所以表单是不同的。
也就迎刃而解了改变这种:
1-创建包含成MultipartFile一类,像这样:
public class Images { MultipartFile image; public MultipartFile getImage() { return image; } public void setImage(MultipartFile image) { this.image = image; } }
2-了春天服务器一起工作的正确形式代码百里香:
<form id="myform" action="#" th:action="@{/upload}" th:object="${Images}" method="POST" modelAttribute="Images" enctype="multipart/form-data"> <input type="file" th:field="${Images.image}" name="file"/> <input type="submit" value="Upload"/> </form>
最后正确的控制器方法:
@RequestMapping(value = "upload", method = RequestMethod.POST) public String addVocabularyValadate(@ModelAttribute("Images") Images images,BindingResult bindingResult, Model model) throws IOException { System.out.println("inputstream Nombre!"+images.getImage().getOriginalFilename()); if(bindingResult.hasFieldErrors() == true) return "error"; else return "upload OK!"; }
答
我认为,您的spring configuration xml
文件中的条目可能会丢失。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- below properties can be configured as per your need -->
<property name="maxUploadSize" value="5000000" />
<property name="maxInMemorySize" value="5000000" />
</bean>
我构式我的服务器的Java应用程序,所以我配置这部分是这样的:) '@Bean 公共MultipartConfigElement multipartConfigElement({ MultiPartConfigFactory factory = new MultiPartConfigFactory(); factory.setMaxFileSize(“256KB”); factory.setMaxRequestSize(“256KB”); return factory.createMultipartConfig(); }' – 2014-12-04 12:36:27