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

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、测试运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值