您的位置:首页 > 其它

IE7下不允许显示用户本地图片的问题

2008-09-15 12:16 274 查看
在IE6.0中,用户可以在javascript中或许最终用户本地图片的长宽:

<Script language=Javascript>

function getLocalImageInfo( imgUrl )

{

var objImg = new Image();

objImg.src = imgUrl;

alert( objImg.width ) //the width of the local image

alert( objImg.height ) //the height of the local image

}

//调用如下

getLocalImageInfo("file://c:/1.jpg");

</Script>

并且,在IE6.0中,在客户端本地上传图片前可以通过Javascript/html预览要上传的图片,并获取图片的文件大小:

<html>

<head>

<title>Upload file</title>

</head>

<body>

<input type="file" onchange="javascript:previewImage(this.value)" >

<img id="img" />

<script language="javascrtip">

function previewImage( imgUrl )

{

var objImg = document.getElementById("img");

objImg.src = imgUrl;

alert( "the size of the image file:" + objImg.fileSize )

}

</script>

</body>

</html>

Note: 上面的代码最好在img图片加载完毕后再取图片的大小,例如:objImg.onreadystatechange()=function{ if(objImg.readystate=="complete")............}

当在IE7中,如果上述代码放在客户机本机(以html的形式放在客户机器上,而不是放在IIS中通过http访问)以文件方式打开时仍然能实现IE6中的功能,但如果上述代码放在IIS中,用IE7 通过HTTP协议访问则不能正常工作。

经过查找资料才发现IE7在安全性方面做了提升,通过http访问的页面默认是没有访问用户本机图片文件的权限的,所以通过javascript获取不了本机的图片长宽,也不能将本机图片地址赋值给<img>对象。如果将所访问的站点放入“可信站点”列表中(IE7->工具->Internet选项->安全->可信站点),则可以如IE6一样正常工作。

如果不想通过客户将本站点设置为“可信”站点的方式来实现上传图片的预览及获取图片长宽信息,则可以利用style的"DXImageTransform.Microsoft.AlphaImageLoader" 滤镜来实现:

<html >

<head id="Head1" runat="server">

<title>Untitled Page</title>

<script language=javascript>

function setImagePreview( fileUrl )

{

var objDivFilter = document.getElementById("divFilter")

if( fileUrl )

{

objDivFilter.style.width = "400px";

objDivFilter.style.height = "400px"; //这个设置初始大小是必须的

objDivFilter.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod = image)";

objDivFilter.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = fileUrl;

// get width and height

alert( objDivFilter.offsetWidth)

alert( objDivFilter.offsetHeight)

}

}

</script>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:FileUpload ID="txtFile" runat="server" Width="508px" onchange="javascript:setImagePreview( this.value );" />

<br />

<div id="divFilter" />

</div>

</form>

</body>

但上述办法还不能在客户端获取图片文件的大小,我也没有找到很好的解决方案

另外:在.net中,可以在C#后台代码中获取图片的相应信息,只不过这种方式增加了一些不必要的网络传输过程,有一定的性能代价。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: