spring MVC笔记4——文件上传

来源:互联网 发布:youtube出现网络问题 编辑:程序博客网 时间:2024/04/29 23:09

一、上传文件架包

        上传文件需要添加两个架包:

           

二、上传文件解析器:

         DispatcherServlet本身并不知道如何处理multipart的表单数据。这里需要一个multipart解析器把POST请求的multipart数据中抽取出来,这样

         DispatcherServlet就能将其传递给我们的控制器。

        spring_mvc.xml配置上传文件解析器:

        <beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

           <propertyname="defaultEncoding"value="UTF-8"/>

          <propertyname="maxUploadSize"value="1048576"></property>

         </bean>

         注意,multipart解析器的bean ID是有意义的。当DispatcherServlet查找multipart解析器的时候,它将会查找IDmultipart的解析器bean,如

          果multipart解析器是其他ID的话,DispatcherServlet将会忽略它。

 

三、添加文件上传域

        大多数的表单域都是文本数据,所以能够很容易地通过名称-值提交到服务器中。事实上,典型的提交还会带有一个application/x-www-

        form-urlencoded这样的内容类型并将表单上的名字-值以&符合分隔。

       但文件上传的内容一般都是二进制的文件,不适合这种名字-值的格式。这里选择的内容类型是multipart/from-data。其jsp代码:

       <body>                                                      

              <formaction="/springMVC/springController/upload"

                         enctype="multipart/form-data"

                         method="post">

                        选择文件<inputtype="file"name="file"><br>

                          <inputtype="submit"value="提交">

              </form>

        </body>

       注意:这里的提交方式必须是post,否则会出错

 

四、保存文件

         springController中添加upload()方法:

        @RequestMapping(value="/upload")

         public String upload(HttpServletRequest request, HttpServletResponse response) {

                 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

                  if(multipartResolver.isMultipart(request)){

                            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

                            Iterator<String> iter = multipartRequest.getFileNames();

                            while(iter.hasNext()){

                                  MultipartFile file = multipartRequest.getFile((String)iter.next());

                                 String fileName =file.getOriginalFilename();

                                 String path ="D:/"+fileName;

                                 File localFile = new File(path);

                                 try {

                                         file.transferTo(localFile);

                                  }catch (IllegalStateException e) {

                                       e.printStackTrace();

                                 } catch (IOException e) {

                                        e.printStackTrace();

                                }

                           }  

                  }

                 return"/helloWorld";

         }

         CommonsMultipartResolver是一个解析器,这里new一个解析器解析request的内容。multipartResolver.isMultipart(request)是判断request的内容

         是否有multipart类型。MultipartHttpServletRequestspring自带的用于解析文件的requestmultipartRequest.getFileNames()是拿取request的所

         有文件名,然后通过迭代器得到相应的文件,MultipartFile就是定义拿到的对应的上传文件。接着定义一个文件目录用于指定保存上传

         文件的位置。file.transferTo(localFile)就是将上传文件保存到指定的目录。

0 0