2009-02-03 48 views
2

我們目前有一個Java小程序,可以生成大量數據並將其上傳到我們的服務器。我們的上傳方法之一是使用HTTP POST到我們的服務器,其內容僅僅是原始數據(不包含多部分編碼或任何其他內容)。在HTTP中上傳任意數據在Flex中發佈

我正在尋找實現同樣的事情的Flex應用程序,但我沒有看到複製該網絡行爲的方法。 Flex中的所有與HTTP相關的網絡類似乎都是在假設您只是提出請求的情況下工作的。我沒有看到實際設置POST負載的方法(除了設置幾個查詢參數,這些參數在這裏不起作用)。

我真的很喜歡的是能夠發起一個HTTP POST,但是然後能夠像連接套接字一樣寫入連接。這是可能的,而不必在Socket類上編寫自己的HTTP實現?有沒有什麼辦法可以在Flex中設置HTTP POST的有效載荷?

說明:能夠創建數據緩衝區並將其發送到服務器就足夠了(它看起來像是可能的)。如果我可以將連接視爲套接字並將數據發送給它,那麼會更好一些,而不是一次性發送數據,但這並非嚴格要求。

回答

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類之外,我不相信有內置機制,不。希望它有幫助!

+0

我查看了URLRequest文檔。使用URLVariables有什麼好處?該文件似乎建議你可以做req.data = yourData,它會工作。有什麼不同? – Herms 2009-02-03 18:34:07