关于IE8图片上传预览及“无效图片文件”提示解决

今天项目遇到一非常奇怪之问题,于是驱网发帖求助,贴图上传始终提示jpg图像无法正常上传,提示“无效图片文件”,于是查了该论坛的校验代码:

try
{
  $('img_hidden').filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = $('attach_' + id).value;
}
catch (e)
{
   alert(lang['post_attachment_img_invalid']);
   return;
}

异常处在"DXImageTransform.Microsoft.AlphaImageLoader"这个IE6滤镜的加载过程中,提示无效图片,百思不得其解,翻着翻着突然想起自己已经装了IE8,估计是这个滤镜;论坛没更新,于是再次搜索,果不其然,下帖转自http://blog.csdn.net/ajaxchen_615/archive/2009/04/08/4057884.aspx,留贴纪念一下

IE8图片上传预览及“无效图片文件”提示解决

今天换了windows7系统,默认浏览器是IE8,所有网站运行环境配置好后调试昨天写的图片上传预览,竟然弹出提示“无效图片文件”!
Google了一下发现有此问题的很多,核心原因是IE8的还是默认安全机制限制远程获取本地文件的路径,只能得到个文件名。

寻找到的解决办法是点击IE8工具项>internet选项>安全>自定义级别>将上传带上路径勾选,不过找了半天都是此方法,并且是针对beta1版本

,这个将上传带路径我始终是没找到在哪里。

就算是我找到了,如果用户和我一样的浏览器,难道让我去修改用户的浏览器设置,那我成流氓了,还是要从程序下手。

昨天写的IE7,FF3上传预览上加个函

function getValue(id){
    id.select();//该对象选取
    return document.selection.createRange().text;//返回选取项的文本内容
}
利用上面的函数将返回值在递交给以前的代码,就轻松解决了;
IE部分的完整代码为

function getValue(id){id.select();return document.selection.createRange().text;}
        var fielvalue=getValue(imgFile);
        $ID('hidden').filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod ='image';
        try{ $ID('hidden').filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src=fielvalue;} 
        catch(e){w=0;h=0;return;}
        var wh={'w':$ID('hidden').offsetWidth,'h':$ID('hidden').offsetHeight};
        var bili=wh['h']/wh['w'];
        if(wh['w']>100){wh['w']=100;wh['h']=100*bili};
        $ID('hidden').style.width =wh['w'];
        $ID('hidden').style.height=wh['h'];
        $ID('hidden').filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod ='scale';
        $ID("IEview").innerHTML='<img style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader

(sizingMethod=\'scale\',src=\'' + fielvalue +'\');width:'+wh['w']+';height:'+wh['h']+'" src=\'\'/>';
将以上代码替换掉昨天的FF与IE下的图片上传预览else部分就OK了。

我自己用的win7系统,IE实测,用IETester0.3测试了ie7,由于IETeser IE6一打开就挂掉没有测试,由于IE部分的预览是通过IE私有滤镜达到的目的,那么IE7、IE8好使了IE6应该不成问题。

回头给论坛发个贴,告之应该更新检测代码了。

在实际调用时上述代码报错。主要是出在动态获取图片长宽的部分。删除即可。

有话要说