Js对上传文件的大小和类型以及路径的检测-------菜鸟学javascript心得

今天,一同学跟我聊着聊着就问道了如何通过js来检测客户端上传文件的大小、类型已经本地路径!其实我也没有写过这样类似的案例!我只记得之前看一些就是教程的时候,有一个这样的ActiveXObject()的方法,来处理文件的。于是查了一下javascript的参考文档,边写边测试!最后通过结果如下:

 

 

其中的代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	 <head>
		  <title> New Document </title>
		  <meta name="Generator" content="EditPlus">
		  <meta name="Author" content="">
		  <meta name="Keywords" content="">
		  <meta name="Description" content="">
		  <script language="JavaScript">  
				function checkFileSize(files)  
				{  
				//新建处理文件对象
				  var fileSO=new ActiveXObject("Scripting.FileSystemObject"); 
				  //获取文件
				  file=fileSO.GetFile(files);
				  //获取文件大小
				  fileSize=file.size;
				  //获取文件名称
				  fileName=file.name;
				  //获取文件路径
				  filePath=file.path;
				 // alert(file.path)
				  //将文件大小转成KB
				  var mySizeKB = file.size/1024;
				  //将文件大小转换成MB
				  var mySizeMB=mySizeKB/1024;
				  //处理文件名,截取文件的类型
				  var fileType=(fileName.substring(fileName.lastIndexOf(".")+1,fileName.length)).toUpperCase();
				//判断大小,选择MB还是KB的单位显示!
				  if(mySizeMB<1){
					document.getElementById("message").innerHTML="你上传的文件大小是"+mySizeKB+"KB;文件上传类型是."+fileType+";该文件在本机的路径是"+filePath;
				  }else{
					document.getElementById("message").innerHTML="你上传的文件大小是"+mySizeMB+"MB;文件上传类型是."+fileType+";该文件在本机的路径是"+filePath;
				  }

				

				}  

			</script> 
	 </head>

	 <body>
			<input type="file" name="file1" onchange="checkFileSize(this.value)">  
			<p>--------------------------------------------------------<br/>

			<div id="message"></div>
	 </body>	
</html>

 这是我写的,但是我上网百度一下,发现我跟别人的都跟我差不多,都用到了new ActiveXObject("Scripting.FileSystemObject")!

其实,我上写的代码中,不能够预防欺骗的,因为文件可以改文件类型的,如我的是JPG格式的文件,文件名为:博客园.JPG;但我可以重命名,在后面追加了.txt,文件名成了博客园.JPG.txt;则JS就当txt文件处理,如果需求只允许txt文件上传,那么在这种情况下,这个图片文件就会以欺骗的方式被上传上去!这样就与需求想违背了!所以,后面还需要通过服务器端对其进行负责的检验文件的类型!

   还有,以上代码中,fileName=file.name;这一句是可以删除掉的!不过需要将    var fileType=(fileName.substring(fileName.lastIndexOf(".")+1,fileName.length)).toUpperCase();改为var fileType=(filePath.substring(filePath.lastIndexOf(".")+1,filePath.length)).toUpperCase();这样子看起来就更假简洁一些了!

 

欢迎大侠留言指点。。。

 

 

posted @ 2012-10-25 14:54  仕礼哥哥  阅读(583)  评论(0)    收藏  举报