Передача изображения, снятого с помощью Flash, на страницу Asp.net - PullRequest
0 голосов
/ 21 марта 2012

Я использую ActionScript 3 для захвата изображения через веб-камеру пользователя на одной из моих страниц 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 Ответ

1 голос
/ 21 марта 2012

вы можете сделать что-то вроде:

(непроверенный код)

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, возможно, с незначительными изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...