IE+JS: 上传之前检测图片文件大小October

来源: http://www.ugia.cn/?p=73

不得不佩服此人的巧妙的思想,简单几句话搞定了!

文件上传之前的检测,通常是通过文件名来判断文件类型是否合法,但是要想检测文件的大小很难办到,除非在本地或者使用控件。不过在IE下img有几个附加的属性,如:fileCreatedDate、fileModifiedDate、fileSize、fileUpdatedDate、filters,我们可以通过这些属性来获取图片文件的部分信息,如文件大小,我们用file表单同img标签结合,就能够在上传之前判断图片文件的大小是否合法了。下面是Demo:

限制: K <script type="text/javascript"> var oFileChecker = document.getElementById("fileChecker"); function changeSrc(filePicker) { oFileChecker.src = filePicker.value; } oFileChecker.onreadystatechange = function () { if (oFileChecker.readyState == "complete") { checkSize(); } } function checkSize() { var limit = document.getElementById("fileSizeLimit").value * 1024; if (oFileChecker.fileSize > limit) { alert("too large"); } else { alert("ok"); } } </script>

还有一个小小的发现就是,IE下动画的onload事件是在每次循环开始都触发,这样我们可以通过他来达到和js里setInterval()函数一样的效果,如:

monkey loops: 0 <script type="text/javascript"> var loops = 0; document.getElementById("monkey").onload = function () { document.getElementById("loopsNum").innerText = loops; loops ++; } </script>


这两个例子的源代码如下:
第一个:

限制:<inputtype="text"size="4"value="10"name="fileSizeLimit"id="fileSizeLimit"/>K
<inputtype="file"name="file1"id="file1"size="40"onchange="changeSrc(this)"/>
<
imgsrc="about:blank"id="fileChecker"alt="test"height="18"/>

<
scripttype="text/javascript">
var
oFileChecker=document.getElementById("fileChecker");

function
changeSrc(filePicker)
{
oFileChecker.src=filePicker.value;
}

oFileChecker.onreadystatechange=function()
{
if(
oFileChecker.readyState=="complete")
{
checkSize();
}
}

function
checkSize()
{
var
limit=document.getElementById("fileSizeLimit").value*1024;

if(
oFileChecker.fileSize>limit)
{
alert("toolarge");
}
else
{
alert("ok");
}
}
</script>

第二个:

<imgsrc="monkey.gif"id="monkey"alt="monkey"/>loops:<spanid="loopsNum"></span>

<
scripttype="text/javascript">
var
loops=0;
document.getElementById("monkey").onload=function()
{
document.getElementById("loopsNum").innerText=loops;
loops++;
}
</script>

另外补充一些手册里的东西:
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
MAX_FILE_SIZE 隐藏字段(单位为字节)必须先于文件输入字段,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。

注意:本文所讨论的特性仅在IE下有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值