天天看點

用javascrit驗證上傳檔案大小

對于web開發人員來說檔案上傳檔案是經常遇到的,判斷檔案大小也是不可缺少,很多人不願意到背景判斷,因為如果傳到背景判斷,如果檔案過大報錯,還涉及到效率和資料回顯的問題,如果能在前台用javascript現行判斷檔案大小,是最好不過了。

網上總結的一般有兩種方式來實作:

第一種是應用ActiveX控件的實作,例如:

Javascript代碼 

<script type="text/javascript">    

function getFileSize(filePath)    

{    

   var fso = new ActiveXObject("Scripting.FileSystemObject");    

   alert("檔案大小為:"+fso.GetFile(filePath).size);    

}    

</script>    

<body>    

<INPUT TYPE="file" NAME="file" SIZE="30" οnchange="getFileSize(this.value);">    

</body> 

這種方法可以實作,也容易被開發人員想到,但是需要更改浏覽器的安全設定,不然會報“Automation伺服器不能建立對象”這個腳本錯誤。将浏覽器的安全設定改為“中”,然後将ActiveX的設定設為啟用就OK了。

這種方式不安全,不推薦。

第二種方式,用img的dynsrc屬性實作。

在 html标簽中有一個不為一般開發人員“深”知的img标簽,先來說下他有的屬性:src,dynsrc,start,alt,controls,loop,loopdelay,hspace,vspace....還有一些常用的屬性就不列出來了,在這裡我們說一下"dynsrc"這個屬性:dynsrc可以用來插入各種多媒體,格式可以是Wav、Avi、AIFF、AU、MP3、 Ra、Ram等等。url為音頻或視訊檔案及其路徑,可以是相對路徑或絕對路徑。

示例:<img dynsrc="xxxx.mp3">

這樣我們就可以根據dynsrc動态指派任何類型檔案的路徑,在javascript中根據Image對象本身的fileSize屬性來得到檔案的大小。當然Image對象還有其他的幾個屬性,例如:fileCreatedDate、fileModifiedDate、fileSize、 fileUpdatedDate、filters... , 代碼如下:

Javascript代碼 

<script type="text/javascript">    

function getFileSize(filePath)    

{    

   var image=new Image();    

   image.dynsrc=filePath;    

   alert(image.fileSize);    

}    

</script>    

<body>    

<INPUT TYPE="file" NAME="file" SIZE="30" οnchange="getFileSize(this.value)">    

</body>  

<script type="text/javascript">

function getFileSize(filePath)

{

   var image=new Image();

   image.dynsrc=filePath;

   alert(image.fileSize);

}

</script>

<body>

<INPUT TYPE="file" NAME="file" SIZE="30" οnchange="getFileSize(this.value)">

</body>

這種方式我沒試驗成功,我用的是IE8,提示無法設定dynsrc屬性。

綜上:用javascript操作檔案,不是安全性不好,就是相容性不好,我想造成這種結果的原因也是擔心如果js能自如的操作你本機的檔案系統,安全性就大大降低了。

最好不要用這種方式,判斷大小還是在背景比較安全、友善。

今天偶然發現img對象的dynsrc屬性,可以友善的在頁面中插入多媒體内容。在這裡記錄一下。 

不過隻在IE和Netscape中支援,Firefox會提示proprietary attribute

(一)基本文法:

  img dynsrc=url

  說明:img dynsrc可以用來插入各種多媒體,格式可以是Wav、Avi、AIFF、AU、MP3、Ra、Ram等等。url為音頻或視訊檔案及其路徑,可以是相對路徑或絕對路徑。

  示例:<img dynsrc="your.avi">

(二)屬性設定:

  1、預設圖檔:

  文法:src=url

  說明:url為圖檔檔案及其路徑,可以是相對路徑或絕對路徑。該屬性的作用是當視訊檔案下載下傳時,用圖檔占據視訊檔案的顯示位置;視訊檔案下載下傳完成,圖檔被屏蔽,顯示視訊檔案。若指定dynsrc為一個音頻檔案之後,src屬性就被屏蔽,圖檔就不可見了。

  示例:<img dynsrc="your.avi" src=logo.jpg>

  2、播放事件:

  文法:start=fileopen、mouseover

  說明:該屬性規定了檔案播放的事件,預設值是fileopen。也可以兩者同時設定。另外,用滑鼠在播放區域點選一下,也将令浏覽器開始播放該檔案。

  fileopen:檔案打開時;

  mouseover:滑鼠移到播放區域上時。

  示例:<img dynsrc="your.avi" start=fileopen>

  <img dynsrc="your.avi" start=mouseover>

  <img dynsrc="your.avi" start=fileopen,mouseover>

  3、容器屬性:

  文法:height=# width=#

  說明:取值為正整數或百分數。該屬性規定控制台的高度和寬度。

  height:控制台的高度

  width:控制台的寬度

  示例:<img dynsrc="your.avi" height=200 width=200>

  4、說明文字:

  文法:alt=#

  說明:#為說明文字。alt的值是對動畫檔案的非顯示說明。

  示例:<img dynsrc="your.avi" alt=your.avi(200KB)>

  5、控制顯示:

  文法:controls

  說明:用來在視訊視窗下附加MS-WINDOWS的播放控制條。

  示例:<img dynsrc="your.avi" controls>

  6、循環播放:

  文法:loop=正整數或infinite

  說明:該屬性規定音頻或視訊檔案的循環次數,屬性值為-1或infinite時,音頻或視訊檔案反複播放,循環不止。

  屬性值為正整數值時,音頻或視訊檔案的循環次數與正整數值相同;

  屬性值為infinite時,音頻或視訊檔案反複播放,循環不止。

  示例:<img dynsrc="your.avi" loop=2>

     <img dynsrc="your.avi" loop=infinite>

  7、延時播放:

  文法:loopdelay=#

  說明:#=毫秒數。該屬性規定音頻或視訊檔案的延時播放時間。

  示例:<img dynsrc="your.avi" loopdelay=200>

  8、補白屬性:

  文法:hspace=# vspace=#

  說明:取值為正整數,機關為像素。兩個屬性應同時應用。

  hspace:畫面離頁面左邊的距離;

  vspace:畫面離頁面頂部的距離。

  示例:<img dynsrc="your.avi" hspace=10 vspace=10>

繼續閱讀