JavaScript多ファイルアップロード



複数のファイルをアップロードする時、まず解決しなければならない問題の一つは、ファイル選択枠を動的に追加または削除することです.そんなに難しくないと思いましたが、IEがtable.apendChild()のjsコードをサポートしないとは思いませんでした.しかし、幸いにも、ネットワークを介して必要なリソースを検索することができ、最終的には、IEとFFに対応するファイル選択ボックスの動的な追加と削除機能を実現することに成功した.       まずFFで見せた効果を見てみます.IEでも効果があります.ここでアップロードするのはxls形式です. excelファイルは、ファイル選択後にファイルの拡張子名を検証し、一番上のファイル選択ボックスは削除できません.
 
<head>
<title>excel    </title>
</head>
<script type="text/javascript">
    var __FILE_INDEX = 0;//    
    var __LOADING_TIP_DIV=null;
    var __ICON_PATH="<%=request.getContextPath()%>/images/icons";
    /**
    *             ,    xls     
    */
	function checkFile(fileObj){
		var objSpan = document.getElementById("span_"+fileObj.id);
		if(!checkExcel(fileObj.value)){
			objSpan.innerHTML="<img title='  ' src='"+__ICON_PATH+"/check_error.png' border='0'></img><font style='color:red;font-size:12px'>    xls    !</font>"
			fileObj.errFlag = true;
	    } else {
	    	objSpan.innerHTML="<img title='  ' src='"+__ICON_PATH+"/check_right.png' border='0'></img>"
	    	fileObj.errFlag = false;
		}
		if(fileObj.value != "" && fileObj.noDelete!="true"){
			document.getElementById("del_"+fileObj.id).innerHTML="<span title='    ' onclick='deleteFile(\""+fileObj.id+"\")' style='font-size:12px;color: #4684b2;cursor:pointer;border-bottom:1px solid #4684b2'>  </span>";
	    }
   }

	/**
	 *        
	 */
	function deleteFile(fileId){
       var trNode = document.getElementById("tr_" + fileId);
       var trParent = trNode.parentNode;
       trParent.removeChild(trNode);
    }

    /**
     * excel    
     */
   function checkExcel(filePath){
	   var subfix = filePath.substring(filePath.lastIndexOf(".")+1);
		  if(subfix!="xls"){
		    return false;
		  }
		  return true;
   }
	/**
	 *           
	 */
   function excelUpload(){
	   var fileCount = 0;
	   var files = document.getElementsByTagName("INPUT");
	   for(var i=0; i < files.length; i++){
		   if(files[i].type.toLowerCase!='file')continue;
          if(files[i].errFlag){
             alert("        xls  ,     .");
             files[i].focus();
             return;
          }
          if(files[i].value!="")
          	fileCount++;
	  }
	  if(fileCount < 1){
         alert("            !");
         return;
	  }
      document.getElementById("uploadExcelForm").submit();
  }
     /**
      *     
      */
     function addFile(){
    	   ++__FILE_INDEX;
           var fileId = "file"+__FILE_INDEX;
           var uploadTable = document.getElementById("tableUploadFile")
           var trElement = uploadTable.insertRow(-1);
           trElement.id="tr_"+fileId;
           var tdElement = trElement.insertCell(-1);
           tdElement.id="td_"+fileId;
           tdElement.innerHTML =  "<input type='file' id='"+fileId+"' size='30' style='padding-left:5px;width:300px;cursor:pointer;' onchange='checkFile(this)'>"
               +"<span id='span_" + fileId + "'></span>"
               +"<span id='del_" + fileId + "'></span>";
     }
</script>
<body>
<form id="uploadExcelForm" name="uploadExcelForm" method="post"
	target="_parent" enctype="multipart/form-data"
	action="<%=request.getContextPath()%>/excelUpload.action">
<table width="100%" id="tableUploadFile"  align="center" >
	<tr>
		<td>       Excel    : <span title='    ' onclick='addFile()' style='font-size:12px;color: #6495ED;cursor:pointer;border-bottom:1px solid #6495ED'>    </span></td>
	</tr>
	<tr id="tr_file0">
		<td><INPUT class="text" id="file0"
			style="padding-left:5px;width:300px; cursor: pointer" type="file" name="file0" size="30"
			onchange="checkFile(this);" noDelete="true"><span id="span_file0"></span></td>
	</tr>
</table>
 <div align="center" style="width: 100%"><input type="button" value="    "
			onclick="excelUpload();"></div>
</form>

</body>
</html>