基于SpringMVC的文件上传


#### 1. 创建项目

创建`Maven Project`,`Group Id`为`cn.tedu.spring`,`Artifact Id`为`SRPINGMVC-03-UPLOAD`,`Packaging`选择`war`。

除了添加SpringMVC必要的依赖,另外还需要添加`commons-fileupload`依赖:

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

#### 2. 静态页面

在项目的`webapp`下创建`index.html`,该页面要求:

1. 表单`<form>`的`method`属性必须是`post`,因为上传的文件的数据量相对一般的请求参数来说,是非常大的数据,URL中放不下,另外,`enctype`属值的值必须是`multipart/form-data`:

  <form action="" method="post" enctype="multipart/form-data">

2. 表单中必须有浏览文件的控件:

    <input type="file" />


完整代码例如:

    <form action="" method="post" enctype="multipart/form-data">
        <p>请选择您要上传的文件:</p>
        <p><input type="file" /></p>
        <p><input type="submit" value="上传" /></p>
    </form>

#### 3. 接收上传请求

首先,检查`spring-mvc.xml`中关于组件扫描的配置的根包,然后创建`cn.tedu.spring.UploadController`控制器类,添加`@Controller`注解,然后在控制器类中添加处理请求的方法:

    @RequestMapping("upload.do")
    public String upload() {
        return null;
    }

在处理请求的方法中,添加`MultipartFile`类型的参数,该参数就是客户端上传的文件封装得到的对象,在处理请求时,调用该参数对象的`void transferTo(File)`方法即可保存文件:

    @Controller
    public class UploadController {
    
        @RequestMapping("upload.do")
        public String upload(
            @RequestParam("file") MultipartFile file) throws IllegalStateException, IOException {
            // 执行保存
            File dest = new File("d:/1.jpg");
            file.transferTo(dest);
            return null;
        }
        
    }

则静态页面的表单的`action`属性的值就必须是`upload.do`,浏览文件的控件的`name`属性值必须是`file`。

最后,在使用`MultipartFile`之前,还必须在`spring-mvc.xml`中配置`CommonsMultipartResolver`:

    <!-- 配置上传时需要使用的MultipartResolver -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

猜你喜欢

转载自www.cnblogs.com/cgy-home/p/11094836.html