Flex打开并浏览本地文件
项目需求:点击地图上某按钮,弹出相应CAD图以及jpg图片
功能设计:Flex中有FileReference的类可以对文件操作,实现上传、下载的功能,但是没有办法打开本地文件。
只有在AIR桌面开发中有类似功能,在WEB端没有此api。
研究后利用Flex调用JS成功实现功能。
实现原理:因资源布置在服务器上,所以采用点击时,调用后台(C#编写)将相应的dwg以及jpg下载到本地。
再用JS打开轻量级dwg浏览工具”DWGView.exe“(CAD迷你看图)
以及windows自带的”windows图片和传真查看器“分别查看dwg以及jpg图。
运行环境:windows7+IE8+Flex4.0
源代码:
调用JS方法(Flex端触发事件):
1、dwg
private function callExe():void
{
//调用callExe脚本,用”DWGView.exe“工具(缺省即为利用系统默认打开方式),打开D:下,名为1.dwg的数据
ExternalInterface.call("callExe","DWGView.exe","D:////1.dwg");
}
2、jpg
ExternalInterface.call("callExe","D:////"+fileName+".jpg");
JS方法(写到项目”index.template.html“中):
<script language="JavaScript" type="text/javascript">
function callExe(shellp,str)
{
try
{
var objShell= new ActiveXObject("wscript.shell");
objShell.Run(shellp+" "+str);
objShell = null;
}
catch(e)
{
alert('找不到文件"'+shellp+'"(或它的组件之一)。请确定路径和文件名是否正确,而且所需的库文件均可用。');
}
}
</script>
备注:操作时可能会遇到以下问题
1、在下载dwg数据时,因为iis默认没有支持此类型。所以在iis的”MIME类型“中需要添加:文件扩展名”.dwg“,MIME类型:"application/x-autocad"
2、调用JS失败时,需还将网站设置成可信网站,并启动”对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本“