一种让swf文件不写入浏览器缓存的实现方法

AS3的Loader类提供了loadBytes方法,可以通过ByteArray中读取swf,jpg,png和gif格式的文件。如果通过AS3的Socket类接收文件,然后通过Loader的loadBytes方法加载,加载后的文件因为不通过HTTP协议,将不会被写入浏览器的缓存中。

在该实现方法中,client使用的是AS3,server使用的JAVA。具体操作流程如下:

(server)在服务器端创建一个新的ServerSocket,监听端口等待服务器连接; 
(client)创建新的Socket实例,连接server; 
(server)得到来自client的连接,获取连接信息,判断连接合法性; 
(server)通过File类获取client需要的文件,通过DataOutputStream将此文件发送到连接通道; 
(client)socket对象通过onData事件监听获取传输过来的二进制数据,并依次保存于一个ByteArray中; 
(server)当文件发送完成以后,关闭client的连接; 
(client)socket对象通过onClose事件监听得知数据发送完成; 
(client)创建Loader对象,通过Loader的loadBytes方法加载文件。 
整个流程很简单,使用此方法,加载到的文件都只能在客户端的内存中运行,将不会保存在任何缓存中。

这整个实现过程中,因为第一次访问的必要,需要有一个loader.swf文件。此文件需要用户通过浏览器访问,因此可以在此文件中实现该加载方法,用来加载一个真正运行的swf文件。而这个关键的运行文件,将不会在缓存中出现。而用来加载的loader.swf文件,将依旧会被保存在缓存中。

该实现方法,只能简单的做到被加载的swf文件或者图片,是通过可控方式得到的,不会随意的被其他用户通过HTTP直接读取。但是对于彻底的文件保密,由于swf文件的执行必须在客户端实现,因此无法做到彻底屏蔽。如果用户通过内存监听或者破解loader.swf文件后,获取服务器信息并通过此服务器获取、转移并保存文件的二进制数据,这种方式也是可以被破解的。

至于不将文件保存在缓存导致的加载速度问题,肯定会有所影响。但是高速的缓存读取和耗时的服务器读取,必定只能选择其一,是无法避免的。

附带两个文件,一个是AS3的类,用来连接服务器、请求文件和加载文件。一个是JAVA类,用来处理请求并将文件发送给客户端。两个类都只是实现过程的处理展示,并不能直接独立运行。(见我的资源)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值