用了 jQuery Form插件来解决这个问题:http://malsup.com/jquery/form/#code-samples
有没有不用该插件来实现呢?
解决方法:
可以采用HTML5,用jQuery,Ajax实现文件上传,不仅如此,你可以做文件验证(名称,大小,MIME类型)或利用HTML5的进度标签(或者div)处理进度事件。
最近我也在做文件上传,我不想用flash、iframe或其它插件,经过一番研究,我想出了解决方案。
HTML:
1
2
3
4
5
|
<form enctype= "multipart/form-data" >
<input name= "file" type= "file" />
<input type= "button" value= "Upload" />
</form> <progress></progress> |
首先,你可以做一些验证,例如文件的onChange事件:
1
2
3
4
5
6
7
|
$( ':file' ).change(function(){
var file = this .files[0];
name = file.name;
size = file.size;
type = file.type;
//your validation
}); |
按钮点击触发Ajax:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
$( ':button' ).click(function(){
var formData = new FormData($( 'form' )[0]);
$.ajax({
url: 'upload.php' , //server script to process data
type: 'POST' ,
xhr: function() { // custom xhr
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload){ // check if upload property exists
myXhr.upload.addEventListener( 'progress' ,progressHandlingFunction, false ); // for handling the progress of the upload
}
return myXhr;
},
//Ajax事件
beforeSend: beforeSendHandler,
success: completeHandler,
error: errorHandler,
// Form数据
data: formData,
//Options to tell JQuery not to process data or worry about content-type
cache: false ,
contentType: false ,
processData: false
});
}); |
处理进度:
1
2
3
4
5
|
function progressHandlingFunction(e){ if (e.lengthComputable){
$( 'progress' ).attr({value:e.loaded,max:e.total});
}
} |
HTML5的文件上传非常简单,但必须在支持HTML5的浏览器中运行。