spring基于servlet3.0配置上传文件

1、web.xml配置(在之间)

<servlet>
  <multipart-config>
    
    <max-file-size>5242880max-file-size> 
    <max-request-size>20971520max-request-size>  
    <file-size-threshold>0file-size-threshold>   
  multipart-config>
servlet>


相关可配置信息如下:

  • file-size-threshold:数字类型,当文件大小超过指定的大小后将写入到硬盘上。默认是0,表示所有大小的文件上传后都会作为一个临时文件写入到硬盘上。

  • location:指定上传文件存放的目录。当我们指定了location后,我们在调用Partwrite(String fileName)方法把文件写入到硬盘的时候可以,文件名称可以不用带路径,但是如果fileName带了绝对路径,那将以fileName所带路径为准把文件写入磁盘。

  • max-file-size:数值类型,表示单个文件的最大大小。默认为-1,表示不限制。当有单个文件的大小超过了max-file-size指定的值时将抛出IllegalStateException异常。

  • max-request-size:数值类型,表示一次上传文件的最大大小。默认为-1,表示不限制。当上传时所有文件的大小超过了max-request-size时也将抛出IllegalStateException异常。

2、spring-mvc配置

<bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver" id="multipartResolver">
bean>


3、form表单配置

spring基于servlet3.0配置上传文件_第1张图片


form中间一定要有enctype="multipart/form-data",这个配置会让表单以二进制形式提交文件,而且提交的时候一定不能为空,否则会报错400。


4、controller

@RequestMapping("/insert")
public String insertPerson(Person person, HttpServletRequest request)throws Exception{

    int inNum=personApplyService.insertPerson(person);

    /*采用servlet3.0的part方式上传文件*/
    if(inNum==1) {
        Part part1 = request.getPart("idPhoto");                     //获取name=="idPhoto"的文件
        Part part2 = request.getPart("bankPhoto");
        String path = request.getServletContext().getRealPath("/");         //获取webapp的根路径
        String header1 = part1.getHeader("content-disposition");         //获取文件的头部信息
        String header2 = part2.getHeader("content-disposition");
       /*获取文件的名称*/
 	String fileName1 = header1.substring(header1.indexOf("filename=\"") + 10, header1.lastIndexOf("\""));
        String fileName2 = header2.substring(header2.indexOf("filename=\"") + 10, header2.lastIndexOf("\""));
        String savePath = path + File.separator + "upload";
        File fileSaveDir = new File(savePath);                 //创建一个file的新实例,路径为savaPath
        if (!fileSaveDir.exists()) {		//如果这个新实例不存在,就新建一个路径file.mkdir()
            fileSaveDir.mkdir();
        }
        part1.write(savePath + File.separator + fileName1);    //把文件写入的路径之中
        part2.write(savePath + File.separator + fileName2);	//File.separator是文件夹之间的分隔符
								//由于linux和windows的分隔符不同					
        return "redirect:/suc.jsp";				//导致部署的时候会产生问题
    } else {
        return "redirect:/gonglu.html";
    }

}


其他知识点:

spring基于servlet3.0配置上传文件_第2张图片

spring基于servlet3.0配置上传文件_第3张图片



//校验上传文件是否为图片格式
    function pic1() {
        var strs = new Array(); //定义一数组
        var pic1= $("#pic1").val();
        strs = pic1.split('.');
        var suffix = strs [strs .length - 1];

        if (suffix != 'jpg' && suffix != 'gif' && suffix != 'jpeg' && suffix != 'png') {
            alert("你选择的不是图片,请选择图片!");
            var obj = document.getElementById('pic1');
            obj.outerHTML = obj.outerHTML; //这样清空,在IE8下也能执行成功
             //obj.select(); document.selection.clear(); 好像这种方法也可以清空 input file 的value值,不过我没测试
        }
    } 


参考文档:https://my.oschina.net/lenglingx/blog/607972

    http://blog.csdn.net/clementad/article/details/49533189

    https://my.oschina.net/u/1756290/blog/547666

    http://www.cnblogs.com/Leo_wl/p/4393190.html

一个比较详细容易看懂的多文件上传:http://blog.csdn.net/estelle_belle/article/details/51751844(part部分讲解)

你可能感兴趣的:(SpringMVC)