2012-03-21 35 views
0

我正在使用ActionScript 3通过用户网络摄像头捕获图像在我的一个Asp.net页面中。这里是我正在使用的代码将使用Flash捕获的图像传递到Asp.net页面

package 
{ 
    import flash.display.Sprite; 
    import flash.media.Camera; 
    import flash.media.Video; 
    import flash.display.BitmapData; 
    import flash.display.Bitmap; 
    import flash.events.MouseEvent; 
    import flash.net.FileReference; 
    import flash.utils.ByteArray; 
    import com.adobe.images.JPGEncoder; 
    import com.dynamicflash.util.Base64; 

    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 
    import flash.net.URLVariables; 





    public class Main extends Sprite 
    { 
     private var camera:Camera = Camera.getCamera(); 
     private var video:Video = new Video(); 
     private var bmd:BitmapData = new BitmapData(320,240); 
     private var bmp:Bitmap; 
     private var fileReference:FileReference = new FileReference(); 
     private var byteArray:ByteArray; 
     private var jpg:JPGEncoder = new JPGEncoder(); 
     private var _uploadPath:String = "/Upload.aspx"; 







     public function Main():void 
     { 

      saveButton.visible = false; 
      discardButton.visible = false; 

      saveButton.addEventListener(MouseEvent.MOUSE_UP, saveImage); 
      discardButton.addEventListener(MouseEvent.MOUSE_UP, discard); 
      capture.addEventListener(MouseEvent.MOUSE_UP, captureImage); 

      if (camera != null) 
      { 

       video.smoothing = true; 
       video.attachCamera(camera); 
       video.x = 140; 
       video.y = 40; 
       addChild(video); 
      } 
      else 
      { 
       trace("No Camera Detected"); 
      } 
     } 

     private function captureImage(e:MouseEvent):void 
     { 
      bmd.draw(video); 
      bmp = new Bitmap(bmd); 
      bmp.x = 140; 
      bmp.y = 40; 
      addChild(bmp); 

      capture.visible = false; 
      saveButton.visible = true; 
      discardButton.visible = true; 
     } 

     private function saveImage(e:MouseEvent):void 
     { 
      byteArray = jpg.encode(bmd); 
      var base64Bytes:String = Base64.encodeByteArray(byteArray); 
      var vars:URLVariables = new URLVariables(); 
      vars.imageData = base64Bytes; 

      // and send it over the wire via HTTP POST 
      var url:URLRequest = new URLRequest(_uploadPath); 
      url.data = vars; 
      url.method = URLRequestMethod.POST; 

      var loader:URLLoader = new URLLoader(); 
      loader.load(url); 



      //fileReference.save(byteArray, "Image.jpg"); 


      removeChild(bmp); 
      saveButton.visible = false; 
      discardButton.visible = false; 
      capture.visible = true; 
     } 

     private function discard(e:MouseEvent):void 
     { 
      removeChild(bmp); 
      saveButton.visible = false; 
      discardButton.visible = false; 
      capture.visible = true; 
     } 
    } 
} 

这里图像保存使用文件引用,它提示用户保存。不过,我希望图像应发送到asp.net页面或服务器,以便我可以获取图像并将其保存到数据库,所以你们可以指导我如何我可以继续, 任何建议,非常感谢。 感谢

回答

1

,你可以这样做:

(未测试的代码)

import flash.events.Event; 
import flash.events.IOErrorEvent; 

private function saveImage(e:MouseEvent):void 
{ 
    byteArray = jpg.encode(bmd); 

    //Get the URLRequest ready 
    var jpgURLRequest:URLRequest = 
     new URLRequest("http://site.com/upload.aspx?args=here");   
    jpgURLRequest.requestHeaders.push(
     new URLRequestHeader("Content-type", "application/octet-stream")); 
    jpgURLRequest.method = URLRequestMethod.POST; 

    //Add jpg byte array to URL request 
    jpgURLRequest.data = byteArray; 

    //Get the URLLoader ready 
    sendJPGLoader = new URLLoader(jpgURLRequest); 
    sendJPGLoader.dataFormat = URLLoaderDataFormat.BINARY; 
    sendJPGLoader.addEventListener(Event.COMPLETE, uploadJPGComplete); 
    sendJPGLoader.addEventListener(IOErrorEvent.IO_ERROR, uploadJPGIOError); 

    //Try to send image 
    sendJPGLoader.load(jpgURLRequest); 

} 

而且你的事件处理程序:

private function uploadJPGComplete(evt:Event):void { 
    //Handle server response via evt.target.data 

    //Optionally do your stuff after uploading, if it makes sense here 
    removeChild(bmp); 
    saveButton.visible = false; 
    discardButton.visible = false; 
    capture.visible = true; 
} 

private function uploadJPGIOError(evt:IOErrorEvent):void { 
    //Something went wrong while trying to talk to the server 
} 

当然,你必须做服务器的一半,但这应该做你需要在Flash客户端的一切,可能有一些小的tweeking涉及d。

+0

,,谢谢你的兴趣吨,但我无法弄清楚asp.net端,,, onc它发送图像,然后我将不得不处理我的aspx页面的负载右/ – freebird 2012-03-21 06:01:54

相关问题