2010-06-11 71 views
0

首先,我試圖解決一些我沒有建立的開始和那個項目的人確保我離開時工作正常,雖然自從他離開後我沒有碰到過的一個版本似乎也有同樣的問題。我在編程方面也有點新意,所以讓我知道如果我在第一篇文章中遺漏了重要信息,我會嘗試添加更多信息。閃存 - HTTP請求將無法在本地主機

我有一個在線的Flash應用程序,充當用Delphi編寫的服務器應用程序的客戶端。大部分的通信都是使用套接字完成的,工作正常。上傳數據文件和下載結果文件是使用HTTP請求完成的,只要用戶正在使用另一臺計算機上的服務器實例,就可以正常工作。但是,如果用戶在自己的計算機上安裝了服務器應用程序並嘗試將其指定爲localhost作爲url,那麼套接字通信仍然有效,但HTTP請求不會。

所有基於套接字的通信都可以正常工作,並且當它不在本地主機上時,所有的HTTP請求都能正常工作,這就是爲什麼這對我來說太神祕了。我嘗試過更改服務器分派的Flash跨域策略文件,使其完全放寬,所有端口,所有域,所有http請求標頭,仍然沒有運氣。

的Flash應用程序將無限期地坐着等待本地主機的大部分時間,直到我關閉服務器應用程序,然後給這個錯誤信息:

Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://abcde.com/Testing.swf cannot load data from http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378. 

我試過收留了它在多臺計算機,每臺機器可以訪問另一個很好的實例,但在嘗試使用自己的實例時不起作用。另外,如果我只是簡單地把http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378放到網頁瀏覽器中,我想彈出的結果文件就好了。

下面是在Flash應用程序的代碼,試圖下載該文件的塊:

private function downloadFile():void 
{ 
    trace("downloadFile: " + this.guid + " from " + this.server.URL); 
    fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
    fileRef.addEventListener(ProgressEvent.PROGRESS, downloadProgressHandler); 
    var ur:URLRequest = new URLRequest("http://" + _server.URL + ":" + _server.port); 
    ur.url += "/guid=" + _guid; 
    ur.method = URLRequestMethod.GET; 
    fileRef.download(ur, _filename); 
    _downloadStart = true; 
} 

如果任何人有任何見解可言,因爲我完全沒了主意在這裏我將不勝感激。

回答

0

這是Flash播放器安全模型的限制。爲了解決這個問題,您可以將您的Flash作爲AIR應用程序進行打包,並取消了許多這些安全限制。

如果您將Flash文件託管在Web服務器上而不是本地訪問.swf,那麼您也可能獲得更好的成功。

您無法做的另一件事是從Flash播放器訪問本地文件,這是您可以對AIR運行時執行的操作的另一個示例,您無法在Flash播放器中執行此操作。

+0

目前它實際上託管在Web服務器上。由於套接字通信正常,我希望不是這種情況。我曾假設/希望閃存不會區分「http:// localhost:2188/awdwaf」和「http://abcde.com/awdwaf」,只要安全限制即可。 我可能會遇到類似的問題,如果我嘗試使用套接字連接來獲取文件?在這種情況下,AIR應用程序並不是真的可行,所以我需要找到另一種解決方案。 – 2010-06-11 22:15:09

+0

是的,我記得那件事,因爲某些原因,Flash限制本地主機訪問很重要。我想象如果你可以在沒有安全限制的情況下找到其他的Flash Player運行時,你的.swf應該運行良好。我不確定是否存在,除了AIR運行時。 – Kekoa 2010-06-21 14:18:16

相關問題