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
  • 3850

Flex与.NET互操作(十四):FluorineFx的AMF(Action Message Format)通信

AMF(Action Message Format)在开发Flash/Flex应用中使用频率是非常高的,相对普通的HTTP、WebService的SOAP等多种数据通信方式的效率更高,有人曾经做过这方...

vs2010下编译live555官方源代码

官网:http://www.live555.com/liveMedia/public/下载live555-lastest.tar.gz压缩包 其中BasicUsageEnvironment、gro...
  • ainyko
  • ainyko
  • 2015年02月08日 16:29
  • 704

Asp.net MVC3 文本编辑器KindEditor使用及图片上传浏览

先将下载的KindEditor放到项目中 View页面         Index     @Scripts.Render("~/bundles/kindeditor")...

(ASP.NET) 利用ueditor进行图片上传(尝试3)

ueditor的配置

ASP.Net MVC3 图片上传详解(form.js,bootstrap)

图片上传的插件很多,但很多时候还是不能切合我们的需求,我这里给大家分享个我用一个form,file实现上传四张图片的小demo。完全是用jquery前后交互,没有用插件。      最终效果图如...
  • wanwei8
  • wanwei8
  • 2014年01月06日 17:06
  • 1197

【ASP.NET】swfuplod图片上传

根据网上例子简单实现了图片上传和修改的时候默认显示。 我是图片预览的时候存在了缓冲session里面,这里要改Global.asax文件不然session火狐会失效。 Global.asax文件修...
  • hateson
  • hateson
  • 2014年01月08日 00:50
  • 947
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flex4.5 + .net4.0 通过FluorineFx的AMF3协议 以二进制方式图片上传和显示
举报原因:
原因补充:

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