SpringMVC文件上传(转载)

来源:互联网 发布:英语四级真题软件 编辑:程序博客网 时间:2024/05/16 17:51
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;    }

转载地址

1 0
原创粉丝点击