2010-07-08 67 views
2

這應該是微不足道的,我很確定我之前做過一次。下載發佈到服務器的數據作爲來自Flex的文件

我試圖將數據發佈到服務器,並讓它作爲文件下載反彈回來,提示本地瀏覽器文件下載框。我知道服務器部分工作得很好,因爲我可以從演示Web表單發佈,但是當我運行以下Flex 3代碼時,我甚至無法接受請求觸發。

var fileRef:FileReference = new FileReference(); 
private function saveXmlAsFile(event:MouseEvent):void 
{       
    var fileRequest:URLRequest = new URLRequest(); 
    fileRequest.method = URLRequestMethod.POST; 
    fileRequest.url = "http://foo.com/dataBounce"; 

    var urlVariables:URLVariables = new URLVariables();    
    urlVariables.content = "Test content to return" ; 
    // fileRequest.contentType = "application/x-www-form-urlencoded "; 

    urlVariables.fileName = "test.xml"; 

    fileRef.addEventListener(SecurityEvent.ALL, onSecurityError); 
    fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError2); 
    fileRef.addEventListener(IOErrorEvent.NETWORK_ERROR, onNetworkError); 
    fileRef.addEventListener(Event.COMPLETE, onComplete); 

    try 
    { 
     fileRef.download(fileRequest, "test.xml"); 
    }catch(error:Error) { 
     model.logger.error("unable to download file"); 
    }  
} 

注意,當fileRef.download電話叫,我看不出有任何的要求是跨越使用傳統的螢火蟲或HttpWatch的瀏覽器工具,通過網絡進行。

編輯:我應該補充說這是用於Flash Player 10的<,所以我不能使用新的直接另存爲文件功能。

有什麼建議嗎?謝謝。

回答

0

您需要添加fileRef.upload才能觸發上傳。

此外,我會將下載語句移動到onComplete,以便文件在上載前不被請求。

+0

雖然我實際上並沒有上傳任何文件。只需發佈來自TextInput的數據。 – taudep 2010-07-08 16:54:45

+0

下面是一個Adobe文檔的鏈接,看起來我應該可以做我想做的事,不需要調用fileRef.upload,因爲我實際上並沒有上傳文件:http://livedocs.adobe.com/flex /3/html/help.html?content=17_Networking_and_communications_7.html(請參閱從服務器下載文件部分) – taudep 2010-07-08 16:56:59

+0

然後您需要使用URLRequest來保存文件的名稱。此外,URLRequest將是唯一下載的參數,因爲您不更改名稱。 HTH – adamcodes 2010-07-08 17:11:43

0

你的解釋很清楚,但是當我看着你的代碼時,我覺得我錯過了一些東西。

代碼看起來像你正在嘗試做一半的上傳部分和一半的下載部分。

我認爲如果您將.method值設置爲GET,您當前發佈的代碼將會觸發下載。我相信你還需要包含文件名作爲.url屬性的一部分。

但是,要發佈內容然後觸發其下載,需要兩個單獨的操作 - 發佈數據和下載操作,這些操作可能需要從上載操作的onComplete處理程序中調用。

0

好的,我相信我想出了正在發生的事情之一。

如果您未設置URLRequest.data屬性,則默認將請求方法設置爲「GET」。

因此,工作代碼看起來像,用數據設置爲發佈URL變量:

private var fileRef:FileReference; 
private function saveRawHierarchy(event:MouseEvent):void 
{         
    var fileRequest:URLRequest = new URLRequest(); 
    fileRequest.method = URLRequestMethod.POST; 
    fileRequest.url = "http://foo/bounceback"; 

    var urlVariables:URLVariables = new URLVariables();    
    urlVariables.content = "CONTENT HERE"; 
    urlVariables.fileName = "newFileName.xml"; 

    fileRequest.data = urlVariables; 

    fileRef = new FileReference();     
    fileRef.addEventListener(Event.COMPLETE, onComplete); 

    try 
    { 
     fileRef.download(fileRequest, "appHierarchies.xml"); 
    }catch(error:Error) { 
     model.logger.error("unable to download file"); 
    }  
} 

不知道什麼是錯沒有之前提出的要求,雖然。

相關問題