來介紹一下如何使用 flash 製作檔案上傳與下載
flash本身並沒有權限能寫值到伺服器端,所以一定要透過伺服器程式語言的幫忙
從Flash8開始,多了一個叫 FileReference 的類別, 專門在做檔案上傳或下載,
而伺服器也只需要寫一隻upload的功能,讓flash呼叫。
先把要呼叫的伺服器路徑記錄下來
建構FileReference物件,同時偵聽,Select, Progress, Complete事件。
就會開啟作業系統的上傳對話框,讓使用者選取檔案, 為了方便與安全性, 大多都會限定開啟的副檔名。
當使用者選取檔案時
偵聽上傳進度
同時我們再建立一個下載用的Button
而下載也是使用FileReference物件的download方法, 為什麼不直接getURL就好呢?
因為副檔名的關系,如果是.jpg, 一定是會另開視窗, 而download的方法, 就一定是出現下載對話框
flash本身並沒有權限能寫值到伺服器端,所以一定要透過伺服器程式語言的幫忙
從Flash8開始,多了一個叫 FileReference 的類別, 專門在做檔案上傳或下載,
而伺服器也只需要寫一隻upload的功能,讓flash呼叫。
先把要呼叫的伺服器路徑記錄下來
建構FileReference物件,同時偵聽,Select, Progress, Complete事件。
protected static const UPLOAD_URL:String = "upload.ashx"; private var _file :FileReference; _file = new FileReference(); _file.addEventListener(Event.SELECT , _selectHandler); _file.addEventListener(ProgressEvent.PROGRESS , _uploadProgressHandler); _file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA , _uploadCompleteDataHandler);當使用者按下任意的按鈕時, 執行 _file物件的browse方法,
就會開啟作業系統的上傳對話框,讓使用者選取檔案, 為了方便與安全性, 大多都會限定開啟的副檔名。
_file.browse([new FileFilter("Images Formats (*.jpg,*.gif,*.png)", "*.jpg;*.gif;*.png", "JPEG;jp2_;GIFF")]);
當使用者選取檔案時
private function _selectHandler(e:Event):void { _stateLabel.text = _file.name + " size:" + int(_file.size / 1024) + "k"; //的到所取的檔名和檔案大小 _progressBar = new ProgressBar(this, 0, 65); //建立一個進度表物件 _file.upload(new URLRequest(UPLOAD_URL)); //開始上傳到主機 }
偵聽上傳進度
private function _uploadProgressHandler(e:ProgressEvent):void { _progressBar.value = e.bytesLoaded / e.bytesTotal; //跑個百分比吧。 }上傳完成後,伺服器會回傳一個修改過後的新檔名給flash,
同時我們再建立一個下載用的Button
而下載也是使用FileReference物件的download方法, 為什麼不直接getURL就好呢?
因為副檔名的關系,如果是.jpg, 一定是會另開視窗, 而download的方法, 就一定是出現下載對話框
private function _uploadCompleteDataHandler(e:DataEvent):void { //上傳成功。此時伺服器會回傳一個字串, 告訴我們新的檔名和路徑。 _uploadedResultPath = e.data; _stateLabel.text = "uploadComplete" + _uploadedResultPath; removeChild(_progressBar); if (!_downloadBtn) _downloadBtn = new PushButton(this, 0, 40, "DOWNLOAD", _downloadHandler); }下載檔案
private function _downloadHandler(e:MouseEvent):void{ new FileReference().download(new URLRequest(_uploadedResultPath)); }SourceCodeDownload
留言