开发者

generate screenshot and send it to server (not using FileReference.upload)

Do you have any ide开发者_如何学编程as?


Maybe this can help too, this example creates a BitmapData instance, and then sends that as a ByteArray to the server, (in my case, I was using PHP) ... you'll need to write the server side code, but there's nothing quite special here

package 
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.utils.ByteArray;
import mx.graphics.codec.PNGEncoder;
import mx.utils.Base64Encoder;


public class DataUpload extends Sprite
{

    private var _loader:URLLoader;

    public function DataUpload() 
    {
        // create a bitmap data
        var bd:BitmapData = createDummyImage();

        var png:PNGEncoder = new PNGEncoder();
        var ba:ByteArray = png.encode(bd);

        var b64:Base64Encoder = new Base64Encoder();
        b64.encodeBytes(ba);


        // initialize loader
        _loader = new URLLoader();
        _loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
        _loader.addEventListener(ProgressEvent.PROGRESS, loadProgressHandler);

        var request:URLRequest = new URLRequest("http://localhost/YOUR_PHP_SCRIPT_URI");            
        request.method = URLRequestMethod.POST;

        var variables:URLVariables = new URLVariables();
        variables.fileData = b64;
        variables.fileName = "foobar";

        request.data = variables;
        _loader.load(request);

    }

    protected function loadCompleteHandler(event:Event):void {
        trace("complete");
    }

    protected function loadProgressHandler(event:ProgressEvent):void {
        trace("progress : ", event.bytesLoaded / event.bytesTotal);
    }

    private function createDummyImage():BitmapData {
        var bd:BitmapData = new BitmapData(300, 300, true, 0x00ffffff);

        var shape:Shape = new Shape();
        shape.graphics.beginFill(0xff0000);
        shape.graphics.drawCircle(10, 10, 10);
        shape.graphics.endFill();

        bd.draw(shape);
        return bd;
    }       

}

}


Step 1: Use ImageSnapshot to capture the screenshot (I assume we're just talking about the Flash screen, not the OS). This can handle the image encoding for you, or you can capture BitmapData and reencode yourself.

Step 2(a): Use a MultipartLoader to post the generated bytes. Flash security in Flash Player 10 will require the HTTP post to occur on user interaction.

or

Step 2(b): Use a regular URLLoader/URLRequest to post the generated bytes (Base64 encoded, say).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜