1
2
3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
4 p:defaultEncoding="utf-8">
5
6
7 209715200
8
9
10 4096
11
12
其次在pom.xml中要配置两个上传文件的依赖
1
2
3 commons-io
4 commons-io
5 2.4
6
7
8
9 commons-fileupload
10 commons-fileupload
11 1.3.1
12
13
14
15 org.apache.commons
16 commons-lang3
17 3.3.2
18
单文件上传:
1 #zs#*
2 * 单文件上传3 *@paramfile4 *@paramrequest5 *@return
6 *@throwsIllegalStateException7 *@throwsIOException8 *@throwsJSONException9 #fzs#
10 public staticString simUpload(MultipartFile file, HttpServletRequest request)11 throwsIllegalStateException, IOException, JSONException{12
13 if(!file.isEmpty()){14 String path = request.getSession().getServletContext().getRealPath("/upload");15 //定义文件
16 File parent = newFile(path);17 if(!parent.exists()) parent.mkdirs();18
19 HashMap map = new HashMap();20
21 String oldName =file.getOriginalFilename();22
23 long size =file.getSize();24
25 //使用TmFileUtil文件上传工具获取文件的各种信息26 //优化文件大小
27 String sizeString =TmFileUtil.countFileSize(size);28 //获取文件后缀名
29 String ext =TmFileUtil.getExtNoPoint(oldName);30 //随机重命名,10位时间字符串
31 String newFileName = TmFileUtil.generateFileName(oldName, 10, "yyyyMMddHHmmss");32
33 String url = "upload/"+newFileName;34
35 //文件传输,parent文件
36 file.transferTo(newFile(parent, newFileName));37
38 map.put("oldname",oldName);//文件原名称
39 map.put("ext",ext);40 map.put("size",sizeString);41 map.put("name",newFileName);//文件新名称
42 map.put("url",url);43
44 //以json方式输出到页面
45 returnJSONUtil.serialize(map);46 }else{47 return null;48 }49 }
多文件上传(整合了 单选文件和多选文件 的两种)
1 #zs#*
2 * 多文件上传3 *@paramfiles4 *@paramrequest5 *@return
6 *@throwsIllegalStateException7 *@throwsIOException8 *@throwsJSONException9 #fzs#
10 public static List>mutlUpload(MultipartFile[] files, HttpServletRequest request)11 throwsIllegalStateException, IOException, JSONException{12
13 if(files.length > 0){14 String path = request.getSession().getServletContext().getRealPath("/upload");15 //定义文件
16 File parent = newFile(path);17 if(!parent.exists()) parent.mkdirs();18
19 //创建这个集合保存所有文件的信息
20 List> listMap = new ArrayList>();21
22 //循环多次上传多个文件
23 for(MultipartFile file : files) {24
25 //创建map对象保存每一个文件的信息
26 HashMap map = new HashMap();27
28 String oldName =file.getOriginalFilename();29
30 long size =file.getSize();31
32 //使用TmFileUtil文件上传工具获取文件的各种信息33 //优化文件大小
34 String sizeString =TmFileUtil.countFileSize(size);35 //获取文件后缀名
36 String ext =TmFileUtil.getExtNoPoint(oldName);37 //随机重命名,10位时间字符串
38 String newFileName = TmFileUtil.generateFileName(oldName, 10, "yyyyMMddHHmmss");39
40 String url = "upload/"+newFileName;41
42 //文件传输,parent文件
43 file.transferTo(newFile(parent, newFileName));44
45 map.put("oldname",oldName);//文件原名称
46 map.put("ext",ext);47 map.put("size",sizeString);48 map.put("name",newFileName);//文件新名称
49 map.put("url",url);50
51 listMap.add(map);52 }53
54 //以json方式输出到页面
55 returnlistMap;56 }else{57 return null;58 }59 }
前端代码:
文件多选,实际上在
多加了一个 multiple 属性。
要想在当前界面显示上传的文件,而不跳转,就利用 ajax 异步请求:
不过需要注意的是,我这里使用 FormData() 储存文件对象, ajax 要配上这几个参数才可实现文件上传:
$.ajax({
type:"post",
data:form, //FormData()对象
url:basePath+"/upload/mutl",
contentType: false, //必须false才会自动加上正确的Content-Type
processData: false, //必须false才会避开jQuery对 formdata 的默认处理 , XMLHttpRequest会对 formdata 进行正确的处理
success:function(data){
}
});
1
2
3 Stringpath=request.getContextPath();4 StringbasePath=request.getScheme()+"://"+request.getServerName()+path+"/";5 pageContext.setAttribute("basePath", basePath);6 %>
7
8
9
10
文件上传11
12
13
14
15 *{padding:0;margin:0}
16 ul,li{list-style:none;}
17 a{color:#333;text-decoration:none;}
18 .hidden{display:hidden;}
19 input{border:0;outline:0;margin-bottom:10px;}
20 img{vertical-align:middle;}
21 .clear{clear:both;}
22 body{font-size:14px;font-family:"微软雅黑";background:#333}
23 .buttons{display:block;
24 width:80px;
25 height:26px;
26 color:black;
27 background:#ffffff;
28 font-size:14px;
29 font-family:"微软雅黑";
30 margin:0 auto;
31 cursor:pointer;
32 margin-bottom:10px;}
33
34 .container{width:1080px;margin:80px auto;}
35
36 .formbox{float:left;text-align:center;width:300px;}
37 .title{color:#fff;font-size:24px;margin-bottom:20px;}
38 .formbox .f_btn{width:100px;height:40px;background:#0c0;color:#fff;font-size:14px;font-family:"微软雅黑";cursor:pointer;font-weight:bold;}
39 .massage p{color:#fff;text-align:left;height:24px;}
40 .sinimg{width:300px;height:300px;line-height:300px;color:#fff;}
41
42 .formmutibox{float:left;width:342px;margin:0 24px 0;text-align:center;