使用JS验证文件大小,使用方法为
var filesize = obj_file.files[0].size;
在IE11,IE10和chrome等现代浏览器上没有任何问题,但是在IE9\8\7上会报错。
具体信息是:
typeerror:无法获取未定义或null引用的属性
网上说因为IE9以上才会支持
filesize = obj_file.files[0].size;
这个方法。但是现在不想改变客户端的体验。请问有什么妙招来解决这个问题吗?
方案一:
var a = document.getElementById('loadfile').value; $('#myImage').attr('src',a); var imgbytes = document.getElementById('myImage').size; var imgkbytes = Math.round(parseInt(imgbytes)/1024); alert(imgkbytes+' KB');
利用Image对象有size这种属性来抓取。未测试~
方案二
var myFSO = new ActiveXObject("Scripting.FileSystemObject"); var filepath = document.upload.file.value; var thefile = myFSO.getFile(filepath); var size = thefile.size; alert(size + " bytes");
利用ActiveX实现,未测试。
多谢回答,很详细。
方案二应该是可行,不过会在浏览器弹出active的提示,影响体验,无法采用。
方案一中,如果上传文件不是图片,任何格式文件都有image的这个属性吗?
JSP中代码如下:
<td class="tab_titel_left" colspan="2"> <div id="dvTitles" style="overflow-y:auto; overflow-x:auto; margin-bottom:8px;" > </div> <a href="javascript:void(0)" class="easyui-linkbutton" id="addBtn" iconCls='icon-add' onclick="addFile('dvTitles','applyFile')">添加</a> <span style="vertical-align:middle;" id="xgfj_span"></span> </td>
如何添加代码,和后台响应呢?
@齐失陆: 实验了下,方案一似乎不可行。没有低版本IE,在IE11上模拟测试的。可能还是采用flash这种方案比较easy一点。虽然flash要被淘汰,不过旧版本IE已经被淘汰了。
@幻天芒: 嗯,多谢
这个问题估计无解,客户端使用fso是有风险的,浏览器默认是不会开这个权限的,fso几乎有权限可以把c盘格式化。
ie8是阻止用户读取文件大小的,只有插件flash的fileupload