当前位置:编程学习 > C#/ASP.NET >>

FileUpload 在FireFox 下的问题

<input id="FileUpload" type="file" runat="server" size="26"/>
 
在IE下,通过FileUpload.value可以获得完整的路径,在FireFox下只能得到文件名,我在网上查了相关的资料,一个说是用hidden 控件来保存值,二是说用netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
但是都是不可行的,请问应该如何解决??? --------------------编程问答-------------------- 楼主,正好我这几天解决了这个问题!! 
而且是在多浏览器上可以实现的!! 
网上好多方法,但是在Firefox,ie8等高一点版本的浏览器就失效了! 
以下是方法,希望对你有用! 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title> </title> 
<%-- <script type="text/javascript" src="Jscode/JScript.js"> </script>--%> 
</head> 
<body> 
<input type="file" name="File" id="File" onchange='loadImage(this)' /> 
<input id='preview' type='button' value='预览' style='display:none;' onclick='preview();' /> 
<div id='box'> </div> 
<script type="text/javascript"> 
var picPath; 
var image; 
// preview picture 
function preview() 

document.getElementById('preview').style.display = 'none'; 
// 下面代码用来获得图片尺寸,这样才能在IE下正常显示图片      "+image.width+"            "+image.height+" 
document.getElementById('box').innerHTML 
= " <img width='100' height='100' id='aPic' src='"+picPath+"'>"; 

// show view button 
function buttonShow() 

/* 
这里用来解决图片加载延时造成的预览失败. 
简单说明一下,当image对象的src属性发生改变时JavaScript会重新给image装载图片内容, 
这通常是需要一些时间的,如果在加载完成之前想将图片显示出来就会造成错误,所以我们 
通过图片的宽度和高度来判断图片是否已经被成功加载,加载完毕才会显示预览按钮. 
这里我仍然有一个困惑,在IE7下预览效果偶尔会失效. 
*/ 
if ( image.width == 0 || image.height == 0 ) { 
setTimeout(buttonShow, 1000); 
} else { 
document.getElementById('preview').style.display = 'none'; 


function loadImage(ele) { 
picPath = getPath(ele); 
image = new Image(); 
image.src = picPath; 
setTimeout(buttonShow, 1000); 
document.getElementById("preview").click(); //在这里是自动触发那个预览按钮事件!! 

function getPath(obj) 

if(obj) 

//ie 
if (window.navigator.userAgent.indexOf("MSIE")>=1) 

obj.select(); 
// IE下取得图片的本地路径 
return document.selection.createRange().text; 

//firefox 
else if(window.navigator.userAgent.indexOf("Firefox")>=1) 

if(obj.files) 

// Firefox下取得的是图片的数据 
return obj.files.item(0).getAsDataURL(); 

return obj.value; 

return obj.value; 


</script> 
</body> 
</html> --------------------编程问答--------------------
引用 1 楼 wenblue7 的回复:
楼主,正好我这几天解决了这个问题!!
 而且是在多浏览器上可以实现的!!
 网上好多方法,但是在Firefox,ie8等高一点版本的浏览器就失效了!
 以下是方法,希望对你有用!
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>  </title>
  <%--  <script type="text/javascript" src="Jscode/JScript.js">  </script>--%>
  </head>
  <body>
  <input type="file" name="File" id="File" onchange='loadImage(this)' />
  <input id='preview' type='button' value='预览' style='display:none;' onclick='preview();' />
  <div id='box'>  </div>
  <script type="text/javascript">
 var picPath;
 var image;
 // preview picture
 function preview()
 {
 document.getElementById('preview').style.display = 'none';
 // 下面代码用来获得图片尺寸,这样才能在IE下正常显示图片      "+image.width+"            "+image.height+"
 document.getElementById('box').innerHTML
 = "  <img width='100' height='100' id='aPic' src='"+picPath+"'>";
 }
 // show view button
 function buttonShow()
 {
 /*
 这里用来解决图片加载延时造成的预览失败.
 简单说明一下,当image对象的src属性发生改变时JavaScript会重新给image装载图片内容,
 这通常是需要一些时间的,如果在加载完成之前想将图片显示出来就会造成错误,所以我们
 通过图片的宽度和高度来判断图片是否已经被成功加载,加载完毕才会显示预览按钮.
 这里我仍然有一个困惑,在IE7下预览效果偶尔会失效.
 */
 if ( image.width == 0 || image.height == 0 ) {
 setTimeout(buttonShow, 1000);
 } else {
 document.getElementById('preview').style.display = 'none';
 }
 }
 function loadImage(ele) {
 picPath = getPath(ele);
 image = new Image();
 image.src = picPath;
 setTimeout(buttonShow, 1000);
 document.getElementById("preview").click(); //在这里是自动触发那个预览按钮事件!!
 }
 function getPath(obj)
 {
 if(obj)
 {
 //ie
 if (window.navigator.userAgent.indexOf("MSIE")>=1)
 {
 obj.select();
 // IE下取得图片的本地路径
 return document.selection.createRange().text;
 }
 //firefox
 else if(window.navigator.userAgent.indexOf("Firefox")>=1)
 {
 if(obj.files)
 {
 // Firefox下取得的是图片的数据
 return obj.files.item(0).getAsDataURL();
 }
 return obj.value;
 }
 return obj.value;
 }
 }
  </script>
  </body>
  </html>

这不是我以前会你的帖子吗!?!?
http://topic.csdn.net/u/20090911/15/cabda000-f03b-4b5f-b099-2fb522d82f57.html
8楼的! --------------------编程问答-------------------- 党一直教育我们要 : "全部Copy" 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,