springmvc与Servlet3.0不依赖common包实现文件上传

来源:互联网 发布:大数据应用方向 编辑:程序博客网 时间:2024/06/03 22:40

Servlet3.0以上的版本不再需要第三方组件Commons.io和commons-fileupload,可以使用@MultipartConfig注解在Servlet上进行配置上传,也可以在web.xml上进行配置。

1、修改web.xml配置上传参数

<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value></init-param><!--Servlet3.0以上文件上传配置 -->        <multipart-config>            <max-file-size>5242880</max-file-size><!--上传单个文件的最大限制5MB -->            <max-request-size>20971520</max-request-size><!--请求的最大限制20MB,一次上传多个文件时一共的大小 -->            <file-size-threshold>0</file-size-threshold><!--当文件的大小超过临界值时将写入磁盘 -->        </multipart-config></servlet>

  • file-size-threshold:数字类型,当文件大小超过指定的大小后将写入到硬盘上。默认是0,表示所有大小的文件上传后都会作为一个临时文件写入到硬盘上。

  • location:指定上传文件存放的目录。当我们指定了location后,我们在调用Part的write(String fileName)方法把文件写入到硬盘的时候可以,文件名称可以不用带路径,但是如果fileName带了绝对路径,那将以fileName所带路径为准把文件写入磁盘,不建议指定。

  • max-file-size:数值类型,表示单个文件的最大大小。默认为-1,表示不限制。当有单个文件的大小超过了max-file-size指定的值时将抛出IllegalStateException异常。

  • max-request-size:数值类型,表示一次上传文件的最大大小。默认为-1,表示不限制。当上传时所有文件的大小超过了max-request-size时也将抛出IllegalStateException异常。

2、修改springmvc-servlet.xml配置信息

将原有的文件上传通用解析器更换为标准解析器,修改后的配置如下所示:

 <!--文件上传解析器 -->    <bean id="multipartResolver"        class="org.springframework.web.multipart.support.StandardServletMultipartResolver">    </bean>

3、修改springmvc-servlet.xml配置信息
<form action="file3Save" method="post"  enctype="multipart/form-data">  <p>     <label for="files">文件:</label>     <input type="file" name="files" id="files" multiple="multiple" />   </p>   <p>   <button>提交</button>   </p>   <p>     ${message}   </p></form>

multiple="multiple"这个属性是HTML5新增加的属性,一些旧版的浏览器可能不支持,使用JavaScript可以处理一下。

4、定义Action
 @RequestMapping(value="/file3Save",method=RequestMethod.POST)    public String file3Save(Model model,MultipartFile[] files,HttpServletRequest request) throws Exception{        //文件存放的位置        String path=request.getSession().getServletContext().getRealPath("/files");        System.out.println(path);        String msg="";        for (MultipartFile file : files) {            //保存文件            File tempFile=new File(path, file.getOriginalFilename());            file.transferTo(tempFile);            msg+="<img src='../files/"+file.getOriginalFilename()+"' width='200' />";        }        model.addAttribute("message", msg);        return "up/upfile3";    }

5、测试运行

原创粉丝点击