flash如何同时访问本地文件系统和网络文件

来源:互联网 发布:樱井知香2016最新作品 编辑:程序博客网 时间:2024/05/17 00:57
这个问题终究还是没有得到完美解决,究其原因是安全方面的考虑,FF及高版本的IE中,INPUT FILE控件似乎也都不支持完全路径的获得,只能得到文件名,JAVASCRIPT也不好用了,还真是一致呢

关键字: flex
一直以来,由于处于安全上的考虑,flash一直无法对本地文件进行操作。目前针对该问题以经有了几种解决方案,如:利用MMSave函数保存数据,但需 要调试环境的支持。结合Javascript保存数据,但有该方法有一个较大的缺点是,由于IE的限制,每次往本地保存数据时都IE都会弹出对话框询问, 若装有杀毒软件的话,也会弹出警告的提示框。还有就是结合服务器端程序,如:asp,jsp等进行数据访问。在这里推荐一种使用SharedObject 对象来进行数据访问的方法:

//注意这里的fooA,是要保存的文件名,后缀默认且必需为.sol
myObj = SharedObject.getLocal("fooA");         //生成一个本地共享对象
if (myObj.data.myObj == undefined) {         //如果该对象没有数据的场合
trace("Storing Data, run me again");
//以下是一个较复杂的数据结构
//用来说明利用SharedObject对象也可以保存复杂的数据结构
myObj = {};
myarray = new Array();
myarray.push({A:"106", B:"107", C:"108"});         //这是一个数据结构(要保存的数据1)
myarray1 = new Array();
myarray1.push({A:"1", B:"2", C:"3"});         //要保存的数据2
//这里很令人困惑,其实这里的.fname和lname是任意写的你也可以写oname等
myObj.fname = myarray;         //将数据放入数组中
myObj.lname = myarray1;
myObj.data.myObj = myObj;         //将数据赋值结共享对象
} else {
trace("Retrieving Data");
//取出数据文件.sol中的数据
var firstname = myObj.data.myObj.fname;
var lastname = myObj.data.myObj.lname;
//由于保存的myObj.fname和.lname都是一个Array
//所以取出来的myObj.fname也是一个Array
trace("First Name: " + firstname[0]["A"]);
trace("Last Name: " + lastname[0]["A"]);
}

SharedObject(共享对象)可以用来存储任何Flash支持的数据类型,比如数字、字符串、数组和对象等等。SharedObject按存放位 置可分为本地型(存在客户端)和远程型(存在服务器端)。本地型共享对象的扩展名为.sol。对于Windows98(me)用户来说,默认的存储路径 是:Application Data\Macromedia\Flash Player\服务器域名路径\Flash电影文件名.swf;对于Windows2000(xp)用户来说,默认的存储路径是:Documents and Settings\[User]\Application Data\Macromedia\Flash Player\服务器域名路径\Flash电影文件名.swf。本地型共享对象只能将数据保存在默认路径下,而且扩展名只能是.sol。在网上有看到说该 方法受文件大小的限制,最大为1K,但经过反复实验发现,该方法并不受文件大小限制。

================================================

Flash Player 8 已增强了安全模型,在该安全模型中,默认设置为不允许本地计算机上的 Flash 应用程序和 SWF 文件与 Internet 和本地文件系统通信。

在 Flash Player 8 中,本地 SWF 文件可以具有以下权限级别:

只访问本地文件(默认) 本地 SWF 文件可从本地文件系统和统一命名约定 (UNC) 网络路径读取内容。

只访问网络       本地 SWF 文件可以访问网络(如 Internet),但不能访问安装该文件的本地文件系统。

故CMP(CenFun Music Player)默认是不可以直接在本地播放网络音乐的。

在网上查找资料,除了使用非官方Flash Player可以播放外,还可以在您的电脑添加一个受信任配置文件来解决,方法如下:

新建一个文本文件,如命名为:TrustFiles.txt       用来存放受信用配置,在文件中添加内容,如下:

c:\
d:\
e:\
f:\

有几个分区就添加几个,然后保存,将此文件放到下面的目录即可:

C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust

其中C是你的操作系统盘,Administrator是您的操作系统用户名,注意对应到您的情况,后面的目录如果没有就新建一个。

============================================

仅做开发者本地测试用,方法均来自网络,欢迎大家添加。
---------
1.http://www.wiyiflash.com/bbs/showthread.asp?postid=4537
一种方法是修改你的发布设置,将“本地访问安全性”修改为"只访问网络"。还有一种仅仅是为了本地测试方便,你可以在本地的设置中放一个信任配置文件,
windows XP路径在:C:\Documents and Settings\用户名\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust
如果不存在FlashPlayerTrust文件夹就创建一个。打开记事本,写上你的swf所在的文件夹如:
F:\CeShi
然后保存为CeShi.cfg,放置到FlashPlayerTrust文件夹中


2.Flash 开发的配置文件 FlashPlayerTrust
来自http://www.cbmland.com/blog.php?archive/2006-06-0

自从flash8出世就收紧了安全策略。默认本地域不能访问网络。开发时确带来不少麻烦。今写了一个cmd文件来解决这个问题。一劳永逸,共享出 来。下载下来双击既可。

允许c:d:e:f:盘上的任何Flash访问网络。也可以自己修改。仅供开发者使用!!!(only for 2000/XP)

rem FlashFlashPlayerTrust.cmd

c:

cd %windir%/system32/Macromed/Flash

md FlashPlayerTrust

cd FlashPlayerTrust

echo c: >myTrustFiles.cfg

echo d: >>myTrustFiles.cfg

echo e: >>myTrustFiles.cfg

echo F: >>myTrustFiles.cfg


cd %userprofile%/Application Data/Macromedia/Flash Player/#Security

md FlashPlayerTrust

cd FlashPlayerTrust

echo c: >myTrustFiles.cfg

echo d: >>myTrustFiles.cfg

echo e: >>myTrustFiles.cfg

echo F: >>myTrustFiles.cfg

===========================================

这个界面大家都应该碰到过吧。自从flash8出世就收紧了安全策略。默认本地域不能访问网络。开发时确带来不少麻烦。今写了一个cmd文件来解 决这个问题。一劳永逸,共享出来。下载下来双击既可。

允许c:d:e:f:盘上的任何Flash访问网络。也可以自己修改。仅供开发者使用!!!(only for 2000/XP)

rem FlashFlashPlayerTrust.cmd

c:

cd %windir%/system32/Macromed/Flash

md FlashPlayerTrust

cd FlashPlayerTrust

echo c: >myTrustFiles.cfg

echo d: >>myTrustFiles.cfg

echo e: >>myTrustFiles.cfg

echo F: >>myTrustFiles.cfg

cd %userprofile%/Application Data/Macromedia/Flash Player/#Security

md FlashPlayerTrust

cd FlashPlayerTrust

echo c: >myTrustFiles.cfg

echo d: >>myTrustFiles.cfg

echo e: >>myTrustFiles.cfg

echo F: >>myTrustFiles.cfg

================================================




于是我决定制作这个小东东.
直接通过Windows右键菜单来修改SWF的安全策略:

点击下载(download:104K)
注:菜单命令可将同一目录下所有SWF文件进行批量更新.

SWF 在 Flash Player 8 表现出四种安全沙盒类型:
1,Remote (通过HTTP URL访问的SWF) 简单说就是放在网上的SWF(本地虚拟站点也算).
安全机制与Flash Player 6相同(crossdomain.xml)

2,Local-with-filesystem 默认方式,可访问本地文件系统,但不能与网络通讯.
也就是这种本地使用getURL()会看到安全提示对话框.

3,Local-with-networking 可以访问网络,但不能访问本地文件系统.
可以载入同一目录下的SWF: a.loadMovie("b.swf");
但不能这样:a.loadMovie("sub/b.swf");或a.loadMovie("c:\b.swf");
(上两种可通过 Flash Local Content Updater 直接转换)

4,Local-trusted (通过Settings Manager指定过的本地SWF.这种权限最大.
相当于Local-with-filesystem-with-network)

范例(安全沙盒类型检测):
::URL::http://dengjie.com/studio8/sandbox.swf
(试试把这个文件下载到本地,再看看显示结果.)

======================================

Flash Player 有几种不同的安全性沙箱。每个安全性沙箱确定 SWF 文件如何与本地文件系统、网络或如何同时与本地文件系统和网络交互。

默认的可以设置为只访问网络,或者只访问本地,如果要同时访问,那么要创建如下配置文件。

创建面向 Flash 开发的配置文件

Flash 8 创作工具在您的硬盘上设置了一个标志,将您标识为开发人员,使您可以使用"全局安全设置"面板面向开发人员的特定版本,而不是面向用户的"全局安全设置" 面板。此标志位于硬盘上的 FlashAuthor.cfg 文件中,该文件在安装 Flash Basic 8 和 Flash Professional 8 创作工具时自动安装。
FlashAuthor.cfg 文件所在目录如下:

Windows     boot disk\Documents and Settings\\Application Data\Macromedia\Flash Player\#Security

Macintosh /Users//Library/Preferences/Macromedia/Flash Player/#Security/

默认情况下,该文件设置为 LocalSecurityPrompt=Author,表示在没有安装创作工具时您在计算机上看到的警告将您视为 Flash 开发人员而非用户。

您可以以最终用户的身份测试本地应用程序,并且可以看到最终用户看到的警告对话框。为此,请在文本编辑器中打开 FlashAuthor.cfg,并将 FlashAuthor.cfg 中的 LocalSecurityPrompt 更改为如下所示:

LocalSecurityPrompt=User

对于设计或开发过程中的其他开发人员或在其本地硬盘上测试 Flash 应用程序但没有安装 Flash 8 创作工具的用户,您可能需要为他们提供将 LocalSecurityPrompt 设置为 Author 的 FlashAuthor.cfg 文件。通过本地部署内容有助于您模拟最终用户体验。

注意:如果删除了 FlashAuthor.cfg 文件,则启动 Flash 8 创作工具时将重新创建该文件。

在硬盘上的 #Security 目录中,您可以创建一个 FlashPlayerTrust 目录,其中可以存储唯一的配置文件。您可以在这些文件内指定硬盘上要信任的目录或应用程序。此目录不需要管理访问权限,因此用户不具有管理权限也可以设置 SWF 文件的权限并测试应用程序。

如果不指定一个目录,则您的内容可能无法达到预期效果。FlashPlayerTrust 目录中的配置文件包含目录路径。该文件可包含一些目录的列表,您可以向该文件添加新的路径。Flash Player 要求配置文件中每行包含一个路径。将任何以 # 符号开头的行(之前没有前导空格)视为注释。

创建配置文件以信任某个目录:

1.定位到硬盘上的 #Security 文件夹。
2.在 #Security 文件夹内部创建一个名为 FlashPlayerTrust 的文件夹。
3.使用文本编辑器在 FlashPlayerTrust 目录中创建一个新文件,并将其另存为 myTrustFiles.cfg。 您可以对该配置文件使用任何唯一的名称。
4.定位到测试 Flash 应用程序的目录。
5.在文件中键入或粘贴每个目录路径(硬盘上的任何目录路径),一行一个目录路径。您可以在不同行上粘贴多个目录路径。完成时,文件将看起来如下 所示:
C:\Documents and Settings\\My Documents\files\
C:\Documents and Settings\\My Documents\testapps\
6.保存对 myTrustFiles.cfg 的更改。
7.测试从您添加到该文件的目录中访问本地和网络文件的文档。

现在,此目录中保存的 Flash 应用程序就可以访问本地文件和网络了。

每个配置文件中可以保存大量目录路径,FlashPlayerTrust 目录中也可以保存大量 *.cfg 文件。

在运行一下刚才无法正确访问本地和网络的SWF文件,你发现,已经可以访问了。

原创粉丝点击