• FMS应用实例 从FMS服务器读取文件(图片/SWF/文本)到客户端


     有时候我们希望从FMS服务器上获取指定的文件,再传送到服务端进行操作。


    由于是文件操作,客户端我们很正常就会想到byteArray类,服务端使用File类。


    另外~由于服务端必不支持ByteArray,我们需要把File读取到的byte存为Array或拼成一串字符再传给客户端。

    客户端把Array或字符转成byteArray再进行操作。

    这个问题困我好几天。感谢GOOGLE!感谢BAIDU!最感谢http://blog.l4cd.net!!!!

    以下内容转自 http://blog.l4cd.net


    先看看服务端代码
    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()+",";//把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://localhost/file");
                nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            }

     
            private 
    function netStatusHandler(e:NetStatusEvent):void
            {
                
    switch (e.info.code)
                {
                    
    case "NetConnection.Connect.Success" :
                        
    //Call服务端getFile方法,获取文件名为"image.jpg"的文件
                        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(",");
                
    //字符转为byteArray;
                while(rs.length)
                {
                    
    byte.writeByte(rs.shift());//删除数组中第一个元素,并返回该元素。
                }
                
    byte.position = 0;//将文件指针的当前位置(以字节为单位)移动或返回到 ByteArray 对象中。 下一次调用读取方法时将在此位置开始读取,或者下一次调用写入方法时将在此位置开始写入。
                //显示
                var loader:Loader = new Loader();
                addChild(loader);
                loader.loadBytes(
    byte);
            }
        }

    }

  • 相关阅读:
    集合
    java正则表达式
    jvm系列(四):jvm知识点总结
    jvm系列(三):java GC算法 垃圾收集器
    Android IOS WebRTC 音视频开发总结(十六)-- 音频设备操作之opensl与jni
    Android IOS WebRTC 音视频开发总结(十五)-- 培训课程大纲
    Android IOS WebRTC 音视频开发总结(十四)-- sip和xmpp异同
    Android IOS WebRTC 音视频开发总结(十三)-- ice原理
    Android IOS WebRTC 音视频开发总结(十二)-- sufaceview
    Android IOS WebRTC 音视频开发总结(十一)-- stun&turn部署
  • 原文地址:https://www.cnblogs.com/skyblue/p/1613865.html
Copyright © 2020-2023  润新知