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