我正在将 Java Web 应用程序转换为 Spring 框架,并感谢一些关于我在文件上传方面面临的问题的建议。原始代码是使用 org.apache.commons.fileupload 编写的。
Spring MultipartFile 是否包装了 org.apache.commons.fileupload 或者我可以从我的 POM 文件中排除此依赖项?
我看过以下示例:
@RequestMapping(value = "/form", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // store the bytes somewhere return "redirect:uploadSuccess"; } else { return "redirect:uploadFailure"; } }
最初我试图遵循这个例子,但总是得到一个错误,因为它找不到这个请求参数。所以,在我的控制器中,我做了以下事情:
@RequestMapping(value = "/upload", method = RequestMethod.POST) public @ResponseBody ExtResponse upload(HttpServletRequest request, HttpServletResponse response) { // Create a JSON response object. ExtResponse extResponse = new ExtResponse(); try { if (request instanceof MultipartHttpServletRequest) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile file = multipartRequest.getFiles("file"); InputStream input = file.getInputStream(); // do the input processing extResponse.setSuccess(true); } } catch (Exception e) { extResponse.setSuccess(false); extResponse.setMessage(e.getMessage()); } return extResponse; }
它正在工作。如果有人能告诉我为什么@RequestParam 对我不起作用,我将不胜感激。顺便说一句,我确实有
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="2097152"/>
</bean>
在我的 servlet 上下文文件中。