春季3.0 MultipartFile上传(Spring 3.0 MultipartFile upl

2019-07-29 08:13发布

我将Java Web应用程序,以Spring框架和赞赏我对文件上传所面临的问题的一些建议。 原代码中使用org.apache.commons.fileupload写。

  1. 春天在什么MultipartFile包装org.apache.commons.fileupload或者我可以排除我的POM文件这种依赖?

  2. 我已经看到了下面的例子:

     @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"; } } 

    本来我想以此为榜样,但总是得到一个错误,因为它找不到此请求PARAM。 所以,在我的控制器我已经做了以下:

     @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没有为我工作,我会很高兴。 BTW我有

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

在我的servlet上下文文件。

Answer 1:

  1. 春天不会对公地文件上传的依赖,所以你会需要它。 如果它不存在春天将使用其内部机制
  2. 你应该通过一个MultipartFile作为方法参数,而不是@RequestParam(..)


Answer 2:

我不得不

  1. 添加的commons-文件上传依赖于我的POM,
  2. 添加multipartResolver豆(在问题中提及),
  3. 使用@RequestParam(“文件”)MultipartFile文件中的handleFormUpload方法和
  4. 添加ENCTYPE在我的jsp: <form:form method="POST" action="/form" enctype="multipart/form-data" >

要得到它的工作。



Answer 3:

这对我的作品。

@RequestMapping(value = "upload.spr", method = RequestMethod.POST)
public ModelAndView upload(@RequestParam("file") MultipartFile file, HttpServletResponse response)
{
    //  handle file here
}


Answer 4:

对于要求PARAM一般sysntax是这个@RequestParam(价值=“你的价值”,需要= TRUE),模式切换请求参数是用来获取FRM URL中的值。



Answer 5:

在POST你只会发送PARAMS在请求主体,而不是在URL(您使用@RequestParams)

这就是为什么你的第二个方法奏效。



Answer 6:

在Spring MVC中引入了SERVET 3.0 3.2的支持。 所以,你需要,如果你使用早期版本的春天,包括公共文件上传。



文章来源: Spring 3.0 MultipartFile upload