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

前几天一位朋友问我一个问题,他说:“我用HTTP接口或是WebService接口可以实现图片上传功能,那么用FluorineFx如何实现图片上传功能呢?”,其实仔细看官方文档和示例程序的自己都可以找到答案,实现上传可以有很多种实现,这里我以官方所提供是示例为基础稍加改动,通过ByteArray类实现图片上传。(文/Bēniaǒ

      首先建立FluorineFx库和网站,在远程服务器类里添加一个处理文件上传的方法,详细代码如下:
  1. namespace ByteStream.Services
  2. {
  3.     [RemotingService]
  4.     public class ByteStreamService
  5.     {
  6.         public ByteArray UploadImage(ByteArray ba)
  7.         {
  8.             MemoryStream ms = new MemoryStream(ba.GetBuffer());
  9.             Image img = Bitmap.FromStream(ms);

  10.             Bitmap newImage = new Bitmap(img);

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

  17.             ByteArray result = new ByteArray(tempStream);
  18.             return result;
  19.         }
  20.     }
  21. }
复制代码
处理图片上传的方法通过把flex客户端传递来的字节数组包装为内存流,然后通过写文件的形式将图片保存到指定的目录下。示例中提供了一个画图板,用户可以通过选择颜色自画不同的图象,然后保存到服务器上指定的目录。画图板的实现是根据鼠标按下的移动路线做的,代码如下:
  1. private function doMouseDown():void
  2. {
  3.     x1 = myCanvas.mouseX;
  4.     y1 = myCanvas.mouseY;
  5.     isDrawing = true;
  6. }
  7. private function doMouseMove():void
  8. {
  9.     x2 = myCanvas.mouseX;
  10.     y2 = myCanvas.mouseY;
  11.     if (isDrawing)
  12.     {
  13.         myCanvas.graphics.lineStyle(2, drawColor);
  14.         myCanvas.graphics.moveTo(x1, y1);
  15.         myCanvas.graphics.lineTo(x2, y2);
  16.         x1 = x2;
  17.         y1 = y2;
  18.     }
  19. }
  20. private function doMouseUp():void
  21. {
  22.     isDrawing = false;
  23. }
  24. //清空画图板
  25. private function onErase(event:MouseEvent):void
  26. {
  27.     myCanvas.graphics.clear();
  28. }
复制代码
TOP