您的位置:首页 > Web前端 > JavaScript

Flex调用js获取本地所选文件的路径

2013-08-11 09:26 666 查看
这几天要做这么个玩意,实现本地的图片的上传和下载,上传文件时要显示获取文件的路径,Flex的Web中有FileReference的类可以对文件操作,实现上传、下载的功能,但是没有办法获取到文件的路径。
网上查了大多很普遍的方法是Flex调用javaScript的文件浏览功能来获取文件路径,网上的方法都不太全面,都得少许的添加和改动,先在总结出来了,供以后的项目里参考:

一、假如你新建一个项目名为getFilePath

首先在项目的creationComplete或者initialize下注册事件,这是是注册init()函数。

下面是Flex端代码:

<fx:Script>
		<![CDATA[
			import flash.net.FileFilter;
			import flash.net.FileReference;
			import mx.controls.Alert;
			import flash.external.ExternalInterface;
			
			private function init():void
			{
				ExternalInterface.addCallback("getPath",getPath);//注册JS回调,第一个getPath为调用js端方法,第二个Flex端对应的接收方法
			    btnBrowser.addEventListener(MouseEvent.CLICK,mouseClickHandler); 
			}
			
			private function mouseClickHandler(event:MouseEvent):void
			{
			  ExternalInterface.call("Browser");//调用JS中Browser函数
			} 
			
			public function getPath(path:String):void
			{
			  showPath.text=path;			
			}		
		]]>
	</fx:Script>

<s:Button x="360" y="50" label="浏览" id="btnBrowser"/>



<s:TextInput x="33" y="49" width="303" id="showPath"/>

二、javascript端方法

html-template => index.template.html的<head></head>中,添加方法

<script language="JavaScript" type="text/javascript">
               var requiredMajorVersion = 9;
               var requiredMinorVersion = 0;
               var requiredRevision = 28;
               function Browser()
                 {
                    document.getElementById("fileInput").click();
                    tempForm.reset();
                  }
               
               function OnFileChange()   
               {   
            	   uploadPIcture.getPath(document.getElementById("fileInput").value);  
               }   
              
        </script>


在body里添加

<form id="tempForm" name="form1">

<input type="file" id="fileInput" style="display:none" onchange="OnFileChange()"/>

</form>

注:此处多加一个<form>控件,是因为有时候在连续调用两次文件浏览控件时,会出现上一个选择文件记录没有被清空,因此每当调用文件浏览控件时,都要reset()一下。

到此就ok了,运行有课能会出现所有的路径都显示C:\fakePath\+文件名的问题,网上查了是ie8下安全级别设置的问题,解决办法如下:

工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”即可。

网上也有不用设置就可以解决的代码,不过我没试过,贴过来,留作参考:

//附带不用修改浏览器安全配置的javascript代码,兼容ie, firefox全系列

function getPath(obj)  
{  
  if(obj)  
    {  
 
    if (window.navigator.userAgent.indexOf("MSIE")>=1)  
      {  
        obj.select();  
 
      return document.selection.createRange().text;  
      }  
 
    else if(window.navigator.userAgent.indexOf("Firefox")>=1)  
      {  
      if(obj.files)  
        {  
 
        return obj.files.item(0).getAsDataURL();  
        }  
      return obj.value;  
      }  
    return obj.value;  
    }  
}  
//参数obj为input file对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: