• 基于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" />
  • 相关阅读:
    Eclipse背景颜色修改
    Android动画效果translate、scale、alpha、rotate详解
    代理上网的方法
    ubuntu系统使用SSH免密码登陆
    Git的思想和基本工作原理
    GitHub详细教程
    Ubuntu和Redhat(Debian)的差别
    T2: 一种能累积计算积分的EC2实例类型
    win server 2008 r2 iis+php 500错误内部服务器错误。
    从OTF字体文件里查找字体名称
  • 原文地址:https://www.cnblogs.com/cgy-home/p/11094836.html
Copyright © 2020-2023  润新知