在Flex中的HTTP Post上传任意数据

时间:2009-02-03 16:46:55

标签: flex actionscript-3 http post

我们目前有一个Java小程序,它可以生成大量数据并将其上传到我们的服务器。我们的上传方法之一是使用HTTP POST到我们的服务器,其内容只是原始数据(没有多部分编码或任何东西)。

我正在寻找实现同样功能的Flex应用程序,但我没有看到复制该网络行为的方法。 Flex中所有与HTTP相关的网络类似乎都假设您只是在提出请求。我没有看到实际设置POST的有效负载的方法(除了设置一些查询参数,这在这里不起作用)。

我真正喜欢的是能够启动HTTP POST,但是能够像套接字一样写入连接。这是否可能而不必在Socket类之上编写我自己的HTTP实现?有没有办法在Flex中设置HTTP POST的有效负载?

澄清:能够创建数据缓冲区并将其发送到服务器就足够了(看起来是可能的)。如果我可以将连接视为套接字并随时间向其发送数据,而不是一次性发送数据会更好,但这并不是严格要求的。

1 个答案:

答案 0 :(得分:2)

听起来你有点问两个问题。是的,有一种方法可以在Flex中设置HTTP POST的有效负载,并将任何格式的文件上传到您的服务器:

private function doPost():void
{
    var yourData:ByteArray = new ByteArray();
    var encoder:Base64Encoder = new Base64Encoder();

    for (var i:int = 0; i < 10000; i++)
        yourData.writeByte(i);

    yourData.position = 0;
    encoder.encodeBytes(yourData);

    var req:URLRequest = new URLRequest("http://yourdomain.com/yourservice.ext");
    req.method = URLRequestMethod.POST;

    var postData:URLVariables = new URLVariables();
    postData.userData = encoder.flush();

    req.data = postData;

    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE, loader_complete);
    loader.load(req);
}

private function loader_complete(event:Event):void
{
    trace("Upload complete!");
}

...但听起来你也想要连接,保持连接打开然后随意写入“就像一个套接字”;如果是这种情况,那么除了为此目的使用Socket类之外,我不相信有内置机制,没有。希望它有所帮助!