對于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>