生成屏幕截图并将其发送到服务器(不使用FileReference.upload)

时间:2009-12-10 19:21:24

标签: flex

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

步骤1:使用ImageSnapshot捕获屏幕截图(我假设我们只是谈论Flash屏幕,而不是操作系统)。这可以为您处理图像编码,或者您可以捕获BitmapData并重新编码。

步骤2(a):使用MultipartLoader发布生成的字节。 Flash Player 10中的Flash安全性将要求在用户交互时发布HTTP帖子。

步骤2(b):使用常规URLLoader / URLRequest发布生成的字节(比方说Base64编码)。

答案 1 :(得分:0)

也许这也有帮助,这个例子创建了一个BitmapData实例,然后将其作为ByteArray发送到服务器,(在我的例子中,我使用的是PHP)...你需要编写服务器端代码,但这里没什么特别的

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;
    }       

}

}