IE5 文件上传不用flash 怎么实现(支持多文件上传)

问题描述:因为某些原因导致flash不好用,而且只能在浏览器IE5的情况下怎么实现文件上传
首先IE5下不支持formData文件上传,addEventListener的用法,以及多文件上传multiple="multiple"的属性。
下面是解决方案:
首先在form上加上enctype="multipart/form-data"这个属性,如果不加的话,后台根本不会获取到文件
其次单文件上传的话可以直接使用
在form表单提交的时候就把上传的文件一起提交
如果想实现多文件上传,我采取的是js实现动态多文件上传
首先有一个文件上传 上传之后文件名会放到<span></span>标签里面
在这里插入图片描述
代码:

<td colspan="3">
   			 <div id="eee">
	            <span>选择文件:</span>
	            <div class="file-select" id="file_div1">
	                <input type="file" onchange="fileChange()" />
	                 <span class="brower"></span>
	                <input type="button" onclick="deleteDiv()" style="display: none;" value="删除" />
	            </div>
	        </div>
       </td>

然后实现
在这里插入图片描述
代码:

<script language="javascript">
	var number = 1;
	function fileChange(){
		var preDiv = document.getElementById("file_div" + number);
	    var nextDiv = preDiv.cloneNode(true);
	    number = number + 1;
	    // 添加新的div
	    nextDiv.setAttribute("id", "file_div" + number)
	    document.getElementById("eee").appendChild(nextDiv);
	    
	    // 对已选完文件的div进行处理
	    var preFile = preDiv.children[0],
	    preSpan = preDiv.children[1],
	    preButton = preDiv.children[2];
	    preFile.name = "files"+number;
	    preFile.id = "files"+number;
	    preFile.style["display"] = "none";
	    preSpan.className = "";
	    preSpan.innerHTML = preFile.value.substring(preFile.value.lastIndexOf('\\')+1);
	    preButton.style["display"] = "inline-block";
	
	} 
	
	 // 删除方法
	function deleteDiv(event) {
	    var ev = event || window.event;
	    var target = ev.target || ev.srcElement;
	    document.getElementById("eee").removeChild(target.parentNode);
	}   
</script>

还有另外一种动态增加<input/>标签的,也是可以实现,但是由于不太好看,就没有采用

 <input type="file" id="file" name="files"/>
 <span id = "upload"></span>

js实现部分

document.getElementById("files").attachEvent("onchange",function () {
	var i = 1;
	var file = "files";
	var attach = file + i ;
	if(i>0){
      if(createInputFile(attach))
          i=i+1;
  	}
	
 });
 function createInputFile(num){
 	  var  aElement=document.createElement("input");   
 	  aElement.name=num;
      aElement.id=num;
      aElement.type="file";
	  if(document.getElementById("upload").appendChild(aElement) == null){
          return false;
	   }else{
	     return true;}
      
 }
 
function getFileName(controlID,fileBox) {
	if (fileBox.value){
	 var path = fileBox.value;
	 var fileName = path.substring(path.lastIndexOf('\\')+1,path.lastIndexOf('.'));
	 document.getElementById(controlID).value = fileName;
	}
}

注意点
IE5 支持 attachEvent的使用但是它要加上on
就是这样使用在这里插入图片描述
另外关于后台参数接收问题
因为我写的时候是一步一步进行封装的后台,也就是后台在接收文件name的值的时候如果name值有一样的就会报错,所以我是采用每个文件的name都不同
例如
在这里插入图片描述

在这里插入图片描述
采取了给它赋name值的操作,这样使得每个的name值都不一样
一般来说,几个文件的name值一样,后台用数组接收应该也可以(我没有尝试)
另外,采取第一种方式进行多文件上传的话
如果有文件必选的逻辑:

  if(document.getElementById("file_div1").innerHTML.value==""){
	     alert('请选文件');    
	    return false;
  }

因为标签的id和name值没有写,之所以没有写是因为写了之后往后台传值的话会有null的情况,就比如说你上传了两个文件,但是后台会接收三个,有一个为null
结果图:
这是我采用了第一种多文件上传的方式
在这里插入图片描述
这是第二种方式
在这里插入图片描述
PS:别的好像就没有什么了,欢迎指点!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值