flex 如何获取上传文件的路径?
flex获取上传文件路径:
第一次,我使用FileReference,结果没有获取路径,原来这个类只可以用来作为文件上传和下载使用。
第二次,我使用flex调用js,代码如下:
<script language="javascript">
function browse(){
var fd = new ActiveXObject("MSComDlg.CommonDialog");
fd.Filter = "*.*";//根据需要更改你的文件过滤类型
fd.FilterIndex = 2; //指定缺省的过滤器
fd.MaxFileSize = 128; //上传大小
fd.ShowOpen();
return fd.filename;
}
</script>
结果有的电脑可以使用,有的不可以,原因是:CommonDialog 控件在 Visual Basic 和 Microsoft Windows 动态链接库 ommdlg.dll. 的例程之间提供了一个接口。为了用这个控件创建一个对话框,ommdlg.dll. 必须在 Microsoft Windows 的 SYSTEM 目录下,需要注册这个控件。
由于这个不可以知道那个电脑没有注册有没有这个控件,所有放弃了。
第三次,还使用flex调用js,需要flex调用js ExternalInterface.call("selectFile"), 还需要js将路径返回到flex,需要flex注册ExternalInterface.addCallback("setValue",setTextValue),整体代码如下:
<!--设置隐藏的文件选择表单-->
<input type="file" id="file" onchange="change()" style="display:none" />
<script language="javascript" type="text/javascript">
function selectFile(){
document.getElementById('file').click();
var Wsh=new ActiveXObject("WScript.Shell");
//将本地文件上载至服务器时包含本地目录路
Wsh.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\0\\160A","0","REG_DWORD");
}
<!--注意id要设置正确-->
function change(){;
var fileName=document.getElementById('file').value;
document.getElementById('BSDemo').setValue(fileName);
}
只针对ie浏览器,ie8以下的版本可以直接获取,但是ie8需要通过js修改注册表。因为浏览器对上传路径加密或者隐藏。