flex4.5 + .net4.0 通过FluorineFx的AMF3协议 以二进制方式图片上传和显示

原创 2012年03月29日 21:54:19

flex端:

RemotingConnection.as

package com.esri.viewer.utils
{
	import flash.net.NetConnection;  
	import flash.net.ObjectEncoding;  
	import flash.net.URLLoader;  
	import flash.net.URLRequest;  
	import flash.events.Event;  
	import flash.system.Security;  
	
	public class RemotingConnection extends NetConnection  
	{  
		public function RemotingConnection(gatewayUrl:String)  
		{  
			//设置通信权限  
			Security.allowDomain(gatewayUrl);  
			//设置数据格式  
			this.objectEncoding = ObjectEncoding.AMF3;  
			//连接网关  
			this.connect(gatewayUrl);  
		}  
	}  
}


ImageDemo.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
	<fx:Script>
		<![CDATA[
			
			import com.esri.viewer.utils.RemotingConnection;
			
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.graphics.codec.PNGEncoder;
			
			[Bindable]
			private var _strName:String;
			
			private var conn:RemotingConnection;
			
			private var byte:ByteArray;
			private var fname:String;
			
			private var __url:String = "http://localhost/FxNETChannel_1/Gateway.aspx";
			
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				var date:Date = new Date();
				fname = date.fullYear.toString() + (date.month+1).toString()+date.date.toString() +date.hours.toString()+date.seconds.toString()+date.minutes.toString()+".png";
				
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderCompleteHandler);
				loader.load(new URLRequest("assets/s.jpg"));
			}
			
			private function loaderCompleteHandler(event:Event):void
			{				
				imgSend.source = event.currentTarget.content.bitmapData;				
				byte = new mx.graphics.codec.PNGEncoder().encode(event.currentTarget.content.bitmapData);
			}
			
			
			private function onResult(result:ByteArray):void
			{
				if(result!=null)
				{					
					var l:Loader = new Loader();
					l.contentLoaderInfo.addEventListener(Event.COMPLETE,lCompleteHandler);
					l.loadBytes(result);
				}
			}
			
			
			private function lCompleteHandler(e:Event):void
			{
				imgGet.source = e.currentTarget.content.bitmapData;
			}
			
			private function onFault(fault:Object):void
			{
				Alert.show("失败!");
			}
			
			private function btnOkClickHandler():void
			{				
				conn = new RemotingConnection(__url);
				conn.call("RemotingService.ImageUploadManage.UploadImage",new Responder(onResult,onFault),byte,fname);				
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<s:layout>
		<s:HorizontalLayout />		
	</s:layout>
	<s:VGroup>
		<s:Button id="btnOk" label="send" click="btnOkClickHandler()"/>
		<s:Scroller>
			<s:Group width="500" height="300">
				<s:Image id="imgSend" source=""/>
			</s:Group>
		</s:Scroller>
	</s:VGroup>
	<s:Scroller>
		<s:Group width="500" height="300">
			<s:Image id="imgGet" source=""/>
		</s:Group>
	</s:Scroller>	
</s:Application>

.net端:

ImageUploadManage.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App_CORE.DBAPI;
using FluorineFx.AMF3;
using System.IO;
using System.Web;
using System.Drawing.Imaging;
using System.Drawing;


namespace RemotingService
{
    /// <summary>
    /// 图片上传管理
    /// author:chenxiangji
    /// </summary>
    
    [FluorineFx.RemotingService("Fluorine service:ImageUploadManage")]
    public class ImageUploadManage
    {
        public ImageUploadManage()
        {
        }       

        public ByteArray UploadImage(ByteArray ba,string fileName)
        {
            MemoryStream stream = new MemoryStream(ba.GetBuffer());
            Image img = Bitmap.FromStream(stream);
            Bitmap bitmap = new Bitmap(img);
            MemoryStream tempStream = new MemoryStream();
            bitmap.Save(tempStream,ImageFormat.Png);
            string path = HttpContext.Current.Server.MapPath("FileUpload/Image/" + fileName);
            FileStream fileStream = new FileStream(path, FileMode.Create);
            tempStream.WriteTo(fileStream);
            fileStream.Close();

            ByteArray result = new ByteArray(tempStream);
            return result;
        }
    }
}


需要说明一下就是FluorineFx一定要用AMF3协议,如果用AMF0的话就会出错。



fluorinefx (AMF3 for .NET)

 Fluorine是与AmfPHP、OpenAmf类似的但是用于.net平台的开源AMF网关。可以应用在Flex2与.net(1.1与2.0,3.5)中。通过使用Fluorine可以在Flex,fla...
  • wind520
  • wind520
  • 2008年10月31日 13:05
  • 3931

FluorineFX简介

关于FluorineFXFluorineFX是一个开源库,提供了一种在.NET framework下对Flex/Flash的远程过程调用,Flex数据服务和实时数据的使用技术。能被.NET frame...
  • NewMap
  • NewMap
  • 2009年06月06日 20:29
  • 3179

FluorineFx快速上手

FluorineFx确实是个.net环境下实现AMF、AMF3,以及webcervice,RPC,再以及RTMP、RTMPT等协议比较好的开源库。它还实现了.net环境下的RPC客户端,与RED5的功...
  • hzexe
  • hzexe
  • 2012年12月23日 15:21
  • 1165

FluorineFX(VS2010版NET和Flex4互操作通信)安装包

  • 2014年11月27日 14:02
  • 371KB
  • 下载

【c#、Red5】关于c#如何使用FluorineFx与Red5通信及相关

啊呀,今天登录CSDN的时候,收到几位网友的私信,大体都是询问关于如何使用FluorineFx这个库的,之前我是有计划写教程的,可能由于其他事情耽误,然后忘记了,见谅~     好了,直接转入正题,首...
  • z3237109
  • z3237109
  • 2016年09月09日 09:40
  • 596

FluorineFx Sample (blogMp3)

FluorineFx实现remotion ,messaging 和data services, , FluorineFx要注意的是net 和as3之间的数据交互.as3的 array 对应的net 是...
  • songhuanren
  • songhuanren
  • 2008年06月06日 11:11
  • 1465

以二进制流的形式上传图片

protected void Unnamed1_Click(object sender, EventArgs e)    {        string Sql = ConfigurationMana...
  • bengdaixiong
  • bengdaixiong
  • 2010年07月06日 13:15
  • 1880

以二进制方式打开文件并显示

以二进制方式打开文件并显示不管是二进制文件还是文本文件,它们都是以二进制数据的方式存储的。对于文本文件来说,它所存放的每一个字节都可以转换为一个可读的字符;而以二进制方式读取文件,只是将数据在内存中的...
  • zhixingzhe
  • zhixingzhe
  • 2009年09月18日 17:03
  • 14371

FluorineFx:实现Flex与ASP.NET的协同开发之组件库

参考资料:Flex和.NET协同开发利器FluorineFxFlex 数据交互的三种方式(WebService、HttpService、Remoting)Flex与ASP.NET通过Remoting方...
  • mygisforum
  • mygisforum
  • 2012年09月13日 22:01
  • 1463

FluorineFXTemplate

  • 2012年02月22日 20:22
  • 187KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flex4.5 + .net4.0 通过FluorineFx的AMF3协议 以二进制方式图片上传和显示
举报原因:
原因补充:

(最多只允许输入30个字)