天天看点

上传文件                                    上传文件

                                    上传文件

互联网中,上传图片,头像,证件,文本等都十分常见,这就涉及到了上传功能。Spring MVC为上传提供了良好的支持。通过MultipartResolver(Multipart)处理,对于MultipartResolver而言,它只是一个接口。

MultipartResolver(接口):

  • CommonsMultipartResolver(实现类):第三方包,可以在所有Spring版本使用
  • StandardServletMultipartResolver(实现类):Spring3.1版本后的产物,依赖servlet3.0或更高。

1. Spring MVC 文件上传基本步骤(下面是xml方式,注解也可以。)

  1. 添加文件上传相关依赖(jar包:commons-fileupload)
  2. 配置对上传文件对象的解析(spring的核心配置文件)
  3. 编写文件上传表单(请求方式为post,enctype必须为multipart/form-data)
  4. 编写对应的控制层对象处理文件上传(通过mutilpartFile参数接收文件)

2.Spring MVC文件上传依赖

添加文件上传时需要的依赖(pom.xml)

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.3</version>
</dependency>
           

3. 定义文件上传的视图解析 

在spring的核心配置文件中添加对象解析

<bean id="multipartResolver" 
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 配置文件编码处理 -->
    <property name="defaultEncoding" value="utf-8"/>
    <!-- 配置文件大小限制 -->
    <property name="maxUploadSize" value="4096000000"/>
    <!-- 配置内存缓冲区大小 -->
    <property name="maxInMemorySize" value="1024000"/>
</bean>
           

说明:配置对象解析时,bean的id一定要指定,而且官方规定必须为multipartResolver

4. 定义文件上传的控制层对象UploadController

@RequestMapping("/upload/")
@Controller
public class UploadController {
   @RequestMapping("uploadUI")
   public String uploadUI(){
       return "upload";
   }
   @RequestMapping("doUpload")
   public ModelAndView doUpload(MultipartFile upfile) throws IOException{
       //获取文件名以及文件大小,检测是否获得文件相关数据
       String fileName=upfile.getOriginalFilename();
       long size=upfile.getSize();
       System.out.println(fileName+"/"+size);
       //构建文件目标对象,这个对象对应的文件路径必须是存在的或者通过file对象自己创建
       File dest=new File("D:/SSMWORK/"+fileName);
       //transferto实现文件上传
       upfile.transferTo(dest);
       //封装数据返回
       ModelAndView mv=new ModelAndView("upload");
       mv.addObject("msg", "upload ok");
       return mv;
   }
}
           

说明:在控制层方法接收请求中file类型的数据时需要借助MultipartFile 类型的参数对象,其参数名要求与表单中type为file的参数名相同。

5. 定义文件上传页面

在WEB-INF/pages目录下创建一个upload.jsp,然后创建上传表单

<body>
   <h1>文件上传</h1>
   <h1>${msg}</h1>
   <form action="doUpload.do" 
         method="post"
         enctype="multipart/form-data">
        <input type="file" name="upfile"/>
        <br/>
        <input type="submit" value="upload"> 
   </form>
</body>
           

说明:定义表单时,提交方式必须为post,enctype必须为multipart/form-data

继续阅读