• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>Flah Ria>Remoting>文章内容
  • Flash remoting-使用ByteArray
  • 来源: 作者: 2008-09-29 【



在As3中,已经提供了byteArray来操作二进制数据,我们同样可以利用fluorine来传递byteArray.首先我们需要按照AS3笔记(14),Hi! Flash remoting(1)-Fluorine中新建一个解决方案,在Sample.cs中,我们需要增加一个处理保存图片的方法,叫做SaveImg.代码如下:

usingSystem;
usingSystem.IO;
usingSystem.Data;
using System.Configuration;
using System.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Drawing;
using System.Drawing.Imaging;
using System.Collections.Generic;
usingSystem.Net;
usingSystem.Text;
usingFluorineFx;
usingFluorineFx.AMF3;

namespace ServiceLibrary1
{
    /// <summary>
    /// Fluorine sample service.
    /// </summary>
    [RemotingService("Fluorine sample service")]
    public class Sample
  {
        public Sample()
        {
        }
        public string Echo(string text)
        {
            return "Gateway echo: " + text;
        }
        public static String SaveImg(ByteArray bArray, String fileName)
        {
            byte[] bytes = new byte[bArray.Length];
            MemoryStream ms = new MemoryStream(new byte[bArray.Length]);
            System.Drawing.Image img = System.Drawing.Bitmap.FromStream(ms);
            Bitmap bmp = new Bitmap(img);
            MemoryStream tempStream = new MemoryStream();
            bmp.Save(tempStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            FileStream fs = new FileStream(System.Web.HttpContext.Current.Server.MapPath(fileName), FileMode.Create); 
            tempStream.WriteTo(fs);
            tempStream.Close();
            tempStream.Dispose();
            fs.Close();
            fs.Dispose();
            return "Image Saved!";
        }
    }
}

SaveImg(ByteArray bArray, String fileName)中的ByteArray为Fluorine所定义的数据类型,SaveImg方法会在服务端文件夹里保存当前位图.这里需要注意,
using FluorineFx;
using FluorineFx.AMF3;是调用FluorineFx的方法集.使用byteArray必须引用FluorineFx.AMF3,在C#中并没有byteArray.关于详细的byteArray操作可以看FluorineFx的帮助手册.

下面为将一个bitmap数据转换为byetarray的案例.下例中JPGEncoder来自As3Corelib.

/*@
Author:frank
Site:www.2solo.cn
Date:2008.02.27
Info:remoting for .net with fluorinefx sending bitmap data
*/

package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash..net.*;
    import flash.utils.ByteArray;
    import com.adobe.images.JPGEncoder;

    public class amf3bmp extends Sprite {

        private var bArr:ByteArray;
        private var bmd:BitmapData=new img(0,0) as BitmapData;
        private var image:Bitmap;
        private static var nc:NetConnection = new NetConnection();
        public static var btn=new test_btn;
        public function amf3bmp() {
            dispatchBtn(btn);
            setUpNC();
            configureAssets();
        }

        private function configureAssets():void {
            image=new Bitmap(bmd);
            addChild(image);

            btn.x=30;
            btn.y=150;
            addChild(btn);
        }
        /*
        网络连接设定
        */

        private function setUpNC() {

            nc.client = nc;
            nc.objectEncoding = flash..net.ObjectEncoding.AMF3;
            nc.connect("http:localhost/fl1/Gateway.aspx");

        }
        /*
        加载url
        */

        private function startLoad():void {

            var JPG:JPGEncoder = new JPGEncoder(70);
            var bary:ByteArray = JPG.encode(image.bitmapData);
            nc.call("ServiceLibrary1.Sample.SaveImg",new Responder(SuccResult,OtherStatus),bary,"remote.jpg");
            bmd.dispose();
        }
        /*
        Remoting成功事件
        */

        private function SuccResult(re:String) {
            trace("成功!");
        }
        /*
        Remoting失败事件
        */

        private function OtherStatus(re:Boolean) {
            trace("错误!");
        }
        /*
        定义按钮事件
        */

        private function dispatchBtn(target):void {
            target.addEventListener(MouseEvent.CLICK,btnClick);
        }
        /*
        按钮事件
        */

        private function btnClick(event:Event):void {
            trace("发送事件" );
            startLoad();
        }
    }
}


本文可作为为As3使用ByteArray的一个范例,也可以作为Flash上传图片的一个范例,我在以后会介绍其他几中图片上传方法.附上附件:http://www.2solo.cn/upload/amf3bmp_2soloDOTcn.zip


本文为frank的学习笔记,转载请注明原文链接
更多笔记请参看:http://www.2solo.cn/log/article.asp?id=87



上一篇:[反射]比较两个VO对象的值   下一篇:没有了
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
推荐内容

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)