利用FluorineFx的ByteArray上传图片

Flex端利用new PNGEncoder().encode(bitmapData)将png图片转换为ByteArray,然后传给服务器,服务端需要定义一个public ByteArray UploadImage(ByteArray ba)方法

服务器端相关代码

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Drawing;
using System.Web;
using FluorineFx;
using FluorineFx.AMF3;

namespace ServiceLibrary5
{
    [RemotingService]
    public class ByteStreamService
    {
        public ByteArray UploadImage(ByteArray ba)
        {
            MemoryStream ms = new MemoryStream(ba.GetBuffer());
            Image img = Bitmap.FromStream(ms);

            Bitmap newImage = new Bitmap(img);

            MemoryStream tempStream = new MemoryStream();
            newImage.Save(tempStream, System.Drawing.Imaging.ImageFormat.Png);
            string path = HttpContext.Current.Server.MapPath("UpLoad/ByteArray.png");
            FileStream fs = new FileStream(path, FileMode.Create);
            tempStream.WriteTo(fs);
            fs.Close();

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

Flex端相关代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Panel x="28" y="58" width="364" height="417" layout="absolute">
		<mx:Canvas id="myCanvas" x="0" y="0" width="334" height="331"
			mouseDown="onMouseDown()" mouseUp="onMouseUp()" mouseMove="onMouseMove()">
		</mx:Canvas>
		<mx:ControlBar x="135" y="459">
			<mx:ColorPicker change="curColor = event.target.selectedColor" />
			<mx:Button label="清空" click="onClear()" />
			<mx:Button label="保存" click="onSave()" />
		</mx:ControlBar>
	</mx:Panel>
	<mx:Image id="imgBox" x="462" y="83"/>
	<mx:Script>
		<![CDATA[
			import mx.core.UIComponent;
			import mx.containers.Box;
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.graphics.codec.PNGEncoder;
			private var flag:Boolean = false;
			private var startX:int;
			private var startY:int;
			private var curColor:uint = 0x000000;

			private function onSave():void
			{
				var bd:BitmapData = new BitmapData(myCanvas.width,myCanvas.height);
				bd.draw(myCanvas);
				var byteArray:ByteArray = new PNGEncoder().encode(bd);

				var nc:NetConnection = new NetConnection();
				nc.client = this;
				var responder:Responder = new Responder(onResult,onStatus);
				nc.connect("http://localhost:9782/Web/Gateway.aspx");
				nc.call("ServiceLibrary5.ByteStreamService.UploadImage",responder,byteArray);
			}

			private function onResult(result:ByteArray):void
			{
				//利用Loader读取图片
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
				loader.loadBytes(result);
			}

			private function onComplete(event:Event):void
			{
				//利用UIComponent加载Loader对象
				var loader:Loader = (event.target  as  LoaderInfo).loader;
				loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onComplete);
	            			var pictureHolder:UIComponent = new UIComponent();
				pictureHolder.addChild(loader);
				this.imgBox.width = myCanvas.width;
				this.imgBox.height = myCanvas.height;
				this.imgBox.addChild(pictureHolder);
			}

			private function onStatus(obj:Object):void
			{
				Alert.show(obj.code.toString());
			}

			private function onClear():void
			{
				myCanvas.graphics.clear();
			}

			private function onMouseDown():void
			{
				startX = myCanvas.mouseX;
				startY = myCanvas.mouseY;
				flag = true;
			}

			private function onMouseUp():void
			{
				flag = false;
			}

			private function onMouseMove():void
			{
				if(flag)
				{
					myCanvas.graphics.moveTo(startX,startY);
					myCanvas.graphics.lineStyle(2,curColor);
					myCanvas.graphics.lineTo(myCanvas.mouseX,myCanvas.mouseY);

					startX = myCanvas.mouseX;
					startY = myCanvas.mouseY;
				}
			}
		]]>
	</mx:Script>
</mx:Application>
时间: 2024-12-18 23:50:13

利用FluorineFx的ByteArray上传图片的相关文章

利用AS3的ByteArray解析SWF的尺寸

AS3的ByteArray可以用来操作二进制.使用它,我们就获取加载进来的SWF的尺寸. 首先要了解下SWF的文件结构,可以下载官方的PDF看下. 用UltraEdit32打开一个SWF,会看到第一个字节是43或46,这是16进制,对应的字符就是C或F,其中C表示压缩过的,F表示未压缩的. 第二个字节和第三个字节是固定的57 53. 接着1个字节表示Flash版本,比如08,就是Flash8的,0A就是Flash10的. 后面4个字节表示Flash文件大小(未压缩时的大小) 到此需要暂停一下.我

利用FluorineFX录制音频与视频

要做一个完整的录制程序,处理RPC请求的类不仅要继承ApplicationAdapter,还要继承IStreamService接口,该接口定义了play(),pause(),publish(),createStream()等一系列方法来完善程序 关于安全性,可以自定义一个实现FluorineFx.Messaging.Api.Stream.IStreamPublishSecurity接口的类,并定义一个IsPublishAllowed()方法,在该方法里可以判断发布流的类型.流的名称以及对发布流进

yii2利用自带UploadedFile上传图片

创建一个 models/UploadForm.php: <?php namespace app\models; use yii\base\Model; use yii\web\UploadedFile; /** * UploadForm is the model behind the upload form. */ class UploadForm extends Model { /** * @var UploadedFile file attribute */ public $file; /*

Flex与.NET互操作(六):Flex和.NET协同开发利器FluorineFx

在本系列前面几篇文章中分别介绍了通过WebService.HTTPService.URLLoader以及FielReference等组件或类来完成Flex与.NET服务端的通信的相关知识点.通过这些方式来完成与服务端的通信是非常方便和简单的,但有他的缺点就是通信数据量较小,如要传输大量的数据或是实现不同对象的序列化传输,它们则满足不了我们的需求,需要寻找另外一种通信协议,另一种高效的传输协议来代替SOAP协议传输的方案,那便是AMF(ActionScript Message Format)协议.

AFNet3.0上传图片

很多iOS应用都会遇到需要上传图片的情况,比如修改个人资料时需要上传自己的头像,最近我也遇到了这种情况,首先参考之前写过的AFNetWorking3.0处理请求头和请求内容. 我们在上述博客的基础之上进行修改,假设我们正在修改个人资料,里面需要修改个人头像和其他资料,用请求头进行用户识别,请求内容包括其他的个人资料. 首先是请求的URL, NSString *url = @"your url"; 接下来定义AFHTTPSessionManager, AFHTTPSessionManag

程序员级别鉴定书(.NET面试问答集锦)

作为一个.NET程序员,应该知道的不仅仅是拖拽一个控件到设计时窗口中.就像一个赛车手,一定要了解他的爱车 – 能做什么不能做什么. 本文参考Scott Hanselman给出的.NET问题列表,整理如下.包括WinForms,ASP.NET,XML以及C#和.NET基础相关的问题,有兴趣的自我检测一下吧- 参考答案另附在文章末尾,由于水平有限,难免有谬误,欢迎指正. 所有号称会写代码的人 进程和线程之间的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同? Windows

ajaxFileupload的源码思路分析

? 1 ajaxfileupload源码: jQuery.extend({ //创建一个临时的iframe; createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="posit

如何将str转成byte[]

string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: string str = System.Text.Encoding.Default.GetString ( byteArray ); 上传图片的时候,图片为空的话就用的桌了 如何将str转成byte[]

yii2图片上传

yii2利用自带UploadedFile上传图片 public static function uploadFile($name) { $uploadedFile = UploadedFile::getInstanceByName($name); if($uploadedFile === null || $uploadedFile->hasError) { return null; } $ymd = date("Ymd"); $save_path = dirname(Yii::$