spring MVC笔记4——文件上传

一、上传文件架包

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

           

二、上传文件解析器:

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

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

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

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

           <property name="defaultEncoding" value="UTF-8"/>

           <property name="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>                                                       

              <form action="/springMVC/springController/upload"

                         enctype="multipart/form-data"

                         method="post">

                         选择文件<input type="file" name="file"><br>

                          <input type="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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值