前一阵子,迭代一个线上的项目,其中有一个图片上传的功能,之前用的ajaxfileupload.js来实现上传的,不过由于ajaxfileupload.js,默认是单文件上传(虽然可以通过修改源码的方法来实现多文件上传),又加上是在移动端做的,所以就打算采用html5的FormData实现多文件上传
首先html页面定义有两种:
Html1
1
2
3
|
<form enctype= "multipart/form-data" id= "formfile" >
<input type= "file" name= "file" />
</>
|
Html2
1
|
<input type= "file" multiple= "multiple" accept= "image/gif, image/jpeg, image/png, image/jpg, image/bmp" />
|
项目中我采用了Html2的方式
再看看上传的JS部分吧:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
$(document).on( "change" , ".upload-img input:file" , function() {
var fileId = $( this ).attr( "id" );
var t_files = this .files;
var imglength = $( "#view_" + fileId).parent().parent().find( ".upload-img" ).length;
if (imglength== 1 ) {
if (t_files.length > 5 ) {
new Message().showMsg( "最多选择五张图片" );
return false ;
} else if (t_files.length < 1 ) {
new Message().showMsg( "至少选择一张图片" );
return false ;
}
} else if (t_files.length+imglength> 6 ) {
new Message().showMsg( '最多再选择' + ( 6 -parseInt(imglength)) + '张图片' );
return false ;
}
var data = new FormData();
for (var i= 0 ;i<t_files.length;i++){
data.append( 'file' ,t_files[i]);
data.append( 'randomCode' ,fileId+i);
data.append( 'upDir' , 'comment' )
}
// for(var pair of data.entries()){
// console.log(pair);
// }
// console.log(JSON.stringify(data));
$.ajax({
url : '${pageContext.request.contextPath}/file/multipleCommentImageUpload' , //用于文件上传的服务器端请求地址
type : 'post' ,
processData: false , // 告诉jQuery不要去处理发送的数据
contentType: false , // 告诉jQuery不要去设置Content-Type请求头
data:data,
cache: false
}).done(function(data,status){
var dataObj = jQuery.parseJSON(data);
if (dataObj.state == - 1 ){
new Message().showMsg( "上传图片出错" );
} else {
var imgs = dataObj.imgs;
for (var i= 0 ;i<imgs.length;i++) {
var imgUrl = imgs[i].imageUrl;
var imglength = $( "#view_" + fileId).parent().parent().find( ".upload-img" ).length
if ( imglength < 5 ) {
$( "#view_" + fileId).parent().after( '<div class="upload-img"><img src="' + imgUrl + '" id="codetool">
上面第19行代表初始化formdata对象,其有两种创建方法,对于使用html2来说使用该方式来创建,使用html1来说可以使用 Java代码部分:
具体上传的代码就需要自己来实现了,总之就是多文件上传后,也还是需要循环着来传的. 网上有挺多的关于formdata多文件上传的文章,但都写的比较零散,有的只写了前台,有的写得只是后台,有一篇写得比较详细,不过是php的,所以自己就整理了一篇java的,希望可以帮到需要帮助的人 原文链接:http://www.cnblogs.com/kanyun/archive/2017/07/13/7159232.html 延伸 · 阅读
精彩推荐
|