文件上传之SpringMVC

Spring已经为我们提供了一个MultipartResolver的实现,我们只需要拿来用就可以了,
那就是org.springframework.web.multipart.commons.CommsMultipartResolver。
因为springMVC的MultipartResolver底层使用的是Commons-fileupload,
所以还需要加入对 Commons-fileupload.jar 的支持。

如果你想使用springMVC对文件上传的解析器来处理文件上传的时候就需要在
spring的applicationContext里面加上springMVC提供的MultipartResolver的申明。
这样之后,客户端每次进行请求的时候,springMVC都会检查request里面是否包含多媒体信息,
如果包含了就会使用MultipartResolver进行解析,springMVC会使用一个支持文件处理的
MultipartHttpServletRequest来包裹当前的HttpServletRequest,
然后使用MultipartHttpServletRequest就可以对文件进行处理了。

第一步
需要在applicationContext.xml文件中引入如下配置:

<!-- 多部分文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!--设置允许上传的最大文件大小,以字节为单位计算。
        当设为-1时表示无限制,默认是-1  -->
    <property name="maxUploadSize" value="104857600" />

    <!--设置在文件上传时允许写到内存中的最大值,
        以字节为单位计算,默认是10240  --> 
    <!-- <property name="maxInMemorySize" value="4096" /> -->

    <!--属性启用是为了推迟文件解析,以便在UploadAction中捕获文件大小异常 -->  
    <!-- <property name="resolveLazily" value="true"/> -->

    <!-- 设置上传文件时的临时目录,默认是Servlet容器的临时目录 -->
    <!--<property name="uploadTempDir" value=""/>-->   

    <!--表示用来解析request请求的默认编码格式,
        当没有指定的时候根据Servlet规范会使用默认值ISO-8859-1。
        当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding -->
    <!-- <property name="defaultEncoding" value="UTF-8"></property> -->

</bean>

前端页面
注意:form表单必须加上enctype=”multipart/form-data”

    <!--需要引入jquery 大家根据自己的路径引入-->
    <script type="text/javascript" src="jquery.min.js"></script>
    <form name="frm" id="frm" action="/demoAdmin/addFile" method="post" enctype="multipart/form-data"> 
            <input type="file" name="file1"   />
            <input type="file" name="file2"   />

            <!--    如果不需要异步 这里直接写submit按钮就可以 -->
            <!-- <input type="submit"  value="上传" /> -->

            <!---点该按钮 异步提交-->
            <input type="button" onclick="upLoad();"  value="上传" />

    </form>

<script type="text/javascript" >

    //提交方法
    function upLoad(){

            //获取表单方式一: 这种方式是获取第一个表单
            //var formData = new FormData($('form')[0]);

            //获取表单方式二:这种方式是得到name属性为frm的第一个表单元素
            //var solform=$("form[name='frm']")[0];
            //var formData= new FormData(solform);

            //获取表单方式三:这种是先得到所有表单,然后再遍历找到你需要的表单
            var formData =null;
            var fs=$('form');//得到所有表单
            for(var i=0;i<fs.length;i++){//遍历
                if(fs[i].id=="frm"){//匹配表单id为frm的表单
                    formData= new FormData(fs[i]);//实例对象
                }
            }

            $.ajax({
                url: '/demoAdmin/addFile',//请求路径
                type: 'POST',//提交方式
                success: function(data){//成功方法

                    //判断返回success表示成功
                    if("success"==data){

                    }else{//否则失败

                        zzrw.alert("操作失败");
                    }

                },error:function(){//请求失败方法

                    zzrw.alert("系统繁忙,请稍后再试!");
                },

                data:formData,// Form表单数据
                //设置jQuery不处理数据或担心的内容类型
                cache: false,
                contentType: false,
                processData: false
            });
    }

</script>

后台处理方式一:

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest;
    import java.util.Iterator;
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.web.multipart.MultipartFile;
    import java.io.File;

    /**
     * 保存文件
     * @param name 文件新的名称
     * @param request
     * @return
     */
    @RequestMapping(value = "addFile")
    @ResponseBody
    public String addFile(String name, HttpServletRequest request) {

        String result = "error";

        DefaultMultipartHttpServletRequest MultipartRequest = (DefaultMultipartHttpServletRequest) request;

        Iterator<String> iter = MultipartRequest.getFileNames();//得到所有文件

        String loadUrl="d://file";//上传路径
        try {

            //判断下一个文件不为空,如果有多个可使用while循环遍历
            if (iter.hasNext()) {

                //得到当前文件
                MultipartFile file = MultipartRequest.getFile(iter.next());

                //得到文件名称
                String fileName = file.getOriginalFilename();

                //得到文件后缀
                String lastname = fileName.substring(fileName.lastIndexOf("."));

                //构建新的文件名
                String newfileName=name+lastname;

                // 创建文件对象,第一个参数是文件夹目录,第二个参数是文件名称
                File target = new File(loadUrl,newfileName);

                //判断是否存在
                if (!target.exists()) {
                        target.mkdirs();//不存在则创建
                }

                file.transferTo(target);//上传文件

                result="success";//表示成功
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

后台处理方式二:

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;

    /**
     * 保存文件
     * @param name  文件名称
     * @param file1 文件1
     * @param file2 文件2
     * @return
     */
    @RequestMapping(value = "addFile")
    @ResponseBody
    public String saveOrUpdateOK(String name, @RequestParam("file1") MultipartFile file1,
    @RequestParam("file2") MultipartFile file2,HttpServletRequest request) {
        String result="error";
        try{
                //判断文件1不为空
                if(!file1.isEmpty()) {

                    //得到文件1名称
                    String fileName1 = file1.getOriginalFilename();

                    //得到文件1后缀名
                    String lastname1=fileName1.substring(fileName1.lastIndexOf("."));

                    //构建新的文件名
                    fileName1=name+"1"+lastname1;

                    //创建文件对象,第一个参数是文件夹目录,第二个参数是文件名称
                    File target1 = new File("D:file",fileName1);

                    //判断目录是否存在 
                    if(!target1.exists()){
                        target1.mkdirs();//不存在则创建
                    } 

                    file1.transferTo(target1);//上传

                }

                //判断文件2不为空
                if(!file2.isEmpty()) {

                    //得到文件2名称
                    String fileName2 = file2.getOriginalFilename();

                    //得到文件2后缀名
                    String lastname2=fileName2.substring(fileName2.lastIndexOf("."));

                    //构建新的文件名
                    fileName2=name+"2"+lastname2;

                    //创建文件对象,第一个参数是文件夹目录,第二个参数是文件名称
                    File target2 = new File("D:file",fileName2);

                    //判断目录是否存在 
                    if(!target2.exists()){
                        target2.mkdirs();//不存在则创建
                    } 

                    file2.transferTo(target2);//上传

                }

            result="success";//表示成功

        }catch(Exception e){
            e.printStackTrace();
        }
        return result;
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值