仅需要new一个对象,将上传后台的url和点击触发上传的元素id传给对象,就可以自从实现上传
暂不支持IE
<html>
<body>
<a href="#" rel="external nofollow" id="a_upload">上传</a>
</body>
</html>
<script src="lib_shb_fileupload.js"></script>
<script type="text/javascript">
var fu = new SHBFileUpload("doUpload.jsp",'a_upload');
fu.callback = function(){
console.log(fu.status) ;
console.log(fu.responseText) ;
}
</script>
js源码如下:
/**
*简单的文件上传
*@author:索洪波
*@qq:609690891
*@version:1.0
*/
/**
*@SHBFileUpload
*@param:url上传url
*@param:id 出发上传操作的元素id
*/ function SHBFileUpload(url,id){
this.url = url ;
this.id = id ;
this.iframe = null ;
this.form = null ;
this.input = null ;
this.status = 'init' ;
this.responseText = '' ;
this.timeout = 100 ; this.init();
}
SHBFileUpload.prototype.createIframe = function(){
var iframe = document.createElement('iframe') ;
iframe.id = 'SHB_FU_Frame' ;
iframe.name = 'SHB_FU_Frame' ;
iframe.style.display = 'none' ;
document.body.appendChild(iframe);
this.iframe = iframe ;
}
SHBFileUpload.prototype.createForm = function(){
var form = document.createElement('form') ;
form.action = this.url ;
form.id = 'SHB_FU_Form' ;
form.name = 'SHB_FU_Form' ;
form.method = 'post' ;
form.encoding = 'multipart/form-data' ;
form.target = 'SHB_FU_Frame' ;
form.style.display = 'none' ;
this.form = form ; var input = document.createElement('input') ;
input.type = 'file' ;
input.id = 'SHB_FU_Input' ;
input.name = 'SHB_FU_Input' ;
input.style.display = 'none' ;
var self = this ;
input.onchange = function(){self.doUpload()} ;
this.input = input ; form.appendChild(input) ;
document.body.appendChild(form) ;
}
SHBFileUpload.prototype.doUpload = function(){
this.status = 'sending' ;
var self = this ;
this.iframe.onload = function(){self.hasLoad()} ;
this.form.submit();
}
SHBFileUpload.prototype.init = function(){
this.createIframe() ;
this.createForm() ;
var self = this ;
document.getElementById(this.id).onclick = function(){self.input.click()} ;
}
SHBFileUpload.prototype.hasLoad = function(){
var iframe = this.iframe ;
this.status = 'success' ;
if(iframe.contentWindow){
this.responseText = iframe.contentWindow.document.body?iframe.contentWindow.document.body.innerHTML:"";
}else if(iframe.contentDocument){
this.responseText = iframe.contentDocument.document.body?iframe.contentDocument.document.body.innerHTML:"";
}
this.callback() ;
}
SHBFileUpload.prototype.callback = function(){}