2012-03-07 56 views
1

我有一個使用調用FileReference.browse()來從用戶請求的SWF一個動畫AS3應用。如果所選的SWF是AS3,我很樂意去。但是,如果它是AS2,我需要先將它加載到AS2包裝器中(以便我的應用程序可以更改它)。所有這些文件(包括我的應用程序和包裝器)都是本地存在於用戶的機器上,但是它們選擇的文件可以存在於任何目錄中。所以要清楚:主要應用程序(AS3) - > Wrapper(AS2) - >用戶文件(AS2)通行證文件加載

我知道如何從Loader的loaderInfo.actionScriptVersion變量獲取上傳文件的ActionScript版本,並且工作正常。我的問題是如何將文件從AS3應用程序傳遞給AS2包裝器,以便它可以加載它。

我首先想到的是轉儲從一個FileReference的負載的ByteArray()函數成共享對象「曲奇」。從用戶體驗的角度來看,這種方法看起來很糟糕,但似乎最有效。但是,我一直無法在AS2中找到任何方法來將ByteArray作爲影片加載(事實上,AS2似乎沒有ByteArray類)。因此,如果有人知道從AS2中的ByteArray加載電影的方法,那麼我的問題的第一個可能的解決方案是。

我的第二個想法是通過已經建立的LocalConnection橋樑,上傳的文件的路徑傳遞給我的包裝,然後只是把它從加載該文件。但是,我無法找到任何方式來獲取文件的路徑,我的谷歌搜索表明安全模型有意防止它。更何況,我不知道我可以從用戶的機器加載任意文件。

我的「舉手之勞;我放棄了」解決方案就是創建單獨的按鈕來加載AS3和AS2文件(留給用戶猜測它是哪一個!),並讓AS2按鈕實際上在AS2包裝。然而,它看起來像AS2沒有一個文件 瀏覽 上傳API和PHP混合動力解決方案,我發現是不是一種選擇(因爲這意味着要在本地運行)。

所以,我會永遠感激,如果任何人都可以點我在正確的方向來解決這三種路障。替代解決方法當然是受歡迎的。


(編輯) 好吧,我發現AS2的版本FileReference類的文檔。它支持相同的文件瀏覽功能,但不支持直接將所選文件加載到SWF中。

然而,安全沙箱中似乎並沒有那麼嚴格的本地文件如我所料,它看起來像有一次我必須把它的路徑,我可以讀取用戶的計算機上的任何SWF。 因此,我應該可以使用JavaScript和帶有文件輸入的HTML表單來獲取文件路徑並將其傳遞給我的應用程序。從網絡瀏覽器中完成所有這些並不理想,但它應該可以工作。如果結果令人滿意,我會提交它作爲答案。


(編輯2) 刮開HTML形式的想法。看起來像JavaScript隱藏的路徑,因爲Flash隱藏它。我現在能想到的唯一選擇是讓用戶複製並粘貼文件的路徑...

+0

AS2包裝的目的是什麼?如果將它加載到AS3加載程序中,它會執行哪些操作嗎? – 2012-03-07 20:01:13

+1

根據我迄今爲止的研究(我只在這方面工作了幾天,所以我可能會誤)AS2和AS3應用程序運行在不能直接相互通信的單獨虛擬機中。因此,爲了使我的AS3應用程序改變上傳的AS2文件,我需要首先將我的命令通過LocalConnection橋傳遞給AS2封裝器,然後AS2封裝器將採取相應措施。我不能僅僅通過LocalConnection創建上傳文件,因爲我沒有創建它(即:沒有任何東西在聽)。 – VisibleMan 2012-03-07 20:13:57

+0

我明白了。但根據您的意見,我認爲有一個AS3和AS2按鈕可能是最好的(唯一?)選項。如果您無法在沒有用戶輸入的情況下再次加載文件引用 - 我唯一能想到的就是使用AIR構建它並將副本寫入臨時文件,然後重新打開它,因爲您會知道文件路徑。 – 2012-03-08 04:09:24

回答

0

好了,我所有的其他線索已經乾涸,所以我提交兩個答案這將實際上工作,雖然都不是理想的:

A)使用Adobe AIR,它將以更多的訪問文件系統(比如獲取路徑信息)爲代價,要求單獨的AIR侏儒ime被安裝。

B)讓用戶自己輸入文件的路徑(對用戶來說很麻煩)

0

閱讀完您的文章後,您可能會重試之前的一次嘗試,並提供一些新信息。 Actionscript 2有一個從瀏覽器查找文件的方法,和AS3一樣。 AS2也有一個FileReference類。看看這裏的文檔:

http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00001040.html

而且,這裏是一個教程:

http://markshu.ca/imm/flash/tutorial/fileReference.html

+0

是的,我知道AS2的FileReference類。不幸的是,它不支持像AS3那樣直接將選定文件加載到正在運行的SWF中,但需要外部服務器才能接收該文件。不過,該教程確實有一些有趣的信息,所以感謝分享它。特別是,如果Flash在將所選文件上傳到服務器之前將其複製到臨時位置,如果我可以找到可靠的方法來獲取該位置,則可以在本地加載該文件。但是,在本地運行時,我一直無法找到它存儲文件的位置 - 可能根本沒有...... – VisibleMan 2012-03-10 23:45:33