Flash站技術應用(7)—FileReference路徑獲取問題

 關於flash後臺通信問題,大家先看下
火山的Flash+asp教程:
[url=http://bbs.blueidea.com/thread-2701824-1-1.html]http://bbs.blueidea.com/thread-2701824-1-1.html[/url]
轉入正題。
其實這個問題,我一直都忽略了。我是從Flash MX時代走過來的人,MX2004出來後,AS就沒有再去認真地學下去,直到現在,Player7後的很多新功能我幾乎都沒有用過,像Tween類,filters類等等。
FileReference類其實也有很長一段時間沒引起我的興趣,但是,看了Flash 8自帶的Sample以後,發覺這東東蠻有用的,可以選擇本地圖片,然後顯示在Flash裏頭。
不過,它的顯示是通過上傳,然後再下載來實現的,覺得很麻煩,看個本地圖片也要經過網絡(不過當初沒有怪它,大概是要演示FileReference類的upload吧),決定把它改裝一下,做個本地的圖片瀏覽器。Flash 8能支持jpg,gif,png三類圖片,能改出來覺得用途還是有滴。
然而,一切都讓我失望了,搞了大半天,都不能把圖片直接讀出來,就是因爲FileReference類無法獲取文件的路徑,只能得到文件名,想用loadMovie或者mcLoader類通過圖片路徑讀取相應圖片,還是沒辦法。可是,感覺只是差一點點啊。
雖然幫助文件沒有提到如何獲取文件路徑,但是我仍不死心,總感覺是有的,於是,我寫了下面的代碼測試:
import flash.net.FileReference;
var fr:FileReference = new FileReference();
fr.browse();
var listener:Object=new Object();
fr.addListener(listener)
listener.onSelect = function(file:FileReference) {
       for (var i in file) {
              trace(i+":"+file[i]);
       }
};
選好了一個文件以後,輸出的結果
_listeners:[object Object]
creator:undefined
creationDate:Thu Feb 15 20:58:03 GMT+0800 2007
modificationDate:Thu Feb 15 20:58:04 GMT+0800 2007
size:3753620
type:.mp3
name:2007127171248.mp3
暈了,用for來枚舉都得不到路徑,看來這次是徹底絕望了。限制安全性也不用限制成這樣吧,Macromedia?
而且,這也將意味着,代碼中的file對象不能自己手動構造,必須通過FileReference的browse方法來構造。因爲,僅通過輸出的結果,是不可能得到你瀏覽的文件的,就是因爲沒了路徑。
通過各大搜索引擎去尋找如何獲取文件路徑的答案,都是隻有問的,沒有回答的。
因爲問這一問題的人不多,所以,這事情早擱淺了,一直沒管它。
後來,朱高兄想做個可以播放本地音樂的播放器,是因爲他看中了Flash 8的FileReference類。但是,當我道出了FileReference類不能獲得文件路徑的真相以後,他的這一想法就像我當初做圖片瀏覽器的想法那樣,給打消了。
最近又有人問到了此問題,看來,也是時候要研究下了。
[url=http://bbs.blueidea.com/thread-2721771-1-1.html]http://bbs.blueidea.com/thread-2721771-1-1.html[/url]
要解決FileReference中的這一問題,至少目前來說,靠Flash是沒有用的了,既然網頁裏頭的文件域有完整路徑,我們爲何不去應用一下呢?
所以,解決此問題,用到的,主要還是Flash與js的通訊了,之前的教程都是用fscommand來弄,這次嘗試用ExternalInterface來實現,所以,接下來會先介紹ExternalInterface類的用法(這個相信大多數人會了,說簡單些),然後就是文件域中的一個相當於FileReference中browse的一個方法,以及類似於FileReference中onSelect的一個事件。
演示地址:
[url=http://hbro.cincn.com/HBrO/course/fileField/fileField.html]http://hbro.cincn.com/HBrO/course/fileField/fileField.html[/url]

進入實例講解之前,先介紹上面所說的幾點內容:
1 ExternalInterface類的使用
這裏均以網頁裏Flash與js的通訊爲例。首先,在Flash裏頭,ExternalInterface類是在Flash.net包裏頭,一般爲方便以後調用該類時不輸入此路徑,as裏會先添加
import flash.net.FileReference
添加了這一句以後,在使用該類時,就不需要重複輸入flash.net了。
接着,要在Flash裏頭調用js的函數,可以使用call方法
call(methodName:String, [parameter1:Object])
爲方便演示,我使用js一個內置的alert方法來進行測試。
新建個Flash文檔,保存爲ExternalInterface.fla,然後輸入下面的代碼:
import flash.net.FileReference;
ExternalInterface.call("alert",1);
發佈一下,然後在IIS下測試你剛生成的網頁,就會看到有個1的對話框出來了。就是說,Flash調用js的函數這一步已經實現。
然後,就是到js控制Flash了。js可以調用Flash裏頭的函數,這裏,ExternalInterface類也起到重要的作用。
本文轉自:http://www.5uflash.com/flashjiaocheng/Flashyuweb/1215.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章