有时候我们希望从FMS服务器上获取指定的文件,再传送到服务端进行操作
由于是文件操作, 客户端我们很正常就会想到byteArray类 服务端使用File类
另外~由于服务端必不支持ByteArray,我们需要把File读取到的byte存为Array或拼成一串字符再传给客户端
客户端把Array或字符转成byteArray再进行操作
先看看服务端代码
main.asc
- application.onConnect = function(client)
- {
- client.getFile = function(filename)
- {
- var file = new File("/" + filename);
- if(!file.name)return "";
- if(file.open("binary","read"))
- {
- var b = "";
- while(!file.eof())b += file.readByte()+",";
- file.close();
- return b;
- }
- return "";
- }
- application.acceptConnection(client);
- }
application.onConnect = function(client)
{
client.getFile = function(filename)
{
var file = new File("/" + filename);//打开文件
if(!file.name)return "";
if(file.open("binary","read"))//以二进制读取文件
{
var b = "";
while(!file.eof())b += file.readByte()+",";//把byte拼成字符
file.close();//关闭文件
return b;
}
return "";
}
application.acceptConnection(client);
}
客户端代码
- package
- {
- import flash.display.Sprite;
- import flash.display.Loader;
- import flash.net.NetConnection;
- import flash.events.NetStatusEvent;
- import flash.net.Responder;
- import flash.utils.ByteArray;
-
- public class FMSGetFileExample extends Sprite
- {
- private var nc:NetConnection;
- public function FMSGetFileExample()
- {
-
- nc = new NetConnection();
- nc.connect("rtmp:/file");
- nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
- }
-
- private function netStatusHandler(e:NetStatusEvent):void
- {
- switch (e.info.code)
- {
- case "NetConnection.Connect.Success" :
-
- nc.call("getFile", new Responder(showFile), "image.jpg");
- break;
- case "NetConnection.Connect.Rejected" :
- case "NetConnection.Connect.Failed" :
- trace("connect error");
- break;
- }
- }
- private function showFile(file:String):void
- {
- if(!file)
- {
- trace("get file error");
- return
- }
- var byte:ByteArray = new ByteArray();
- var rs:Array = file.split(",");
-
- while(rs.length)
- {
- byte.writeByte(rs.shift());
- }
- byte.position = 0;
-
- var loader:Loader = new Loader();
- addChild(loader);
- loader.loadBytes(byte);
- }
- }
- }
|