使用 AMFPHP 1.9 上傳 bytearray 檔案,不需要使用 FileReference
通常我們要使用 FLEX 上傳檔案,我們會用 URLRequest 的 POST 方式,或者是使用 FileReference 來做上傳的動作,但是有時候總會有一些不方便,例如 URLRequest 他會開啟一個視窗,這樣如果被關掉就慘了,那如果用 FileReference.upload 又只能處理一個檔案,或是不可以處理 ByteArray 的資料,不過 AMFPHP 1.9 就支援使用 ByteArray 的資料格式囉。
當然這個做法也不是全然都是好的,因為這種方式要預先載入 ByteArray ,所以一定要使用 FLASH PLAYER 10 的 CLIENT 喔,當然這也是一種冒險啦。先來看看結果吧。PS.這是一個假的範例,因為我的空間可不夠放檔案阿。
其實如果只是檔案選擇後上傳,這倒是還好不一定需要用到,如果是描繪 FLEX 的圖案要上傳,就會使用到囉。另外不要忘記怎麼使用 amfphp 喔~~ 可以參考之前的文章。
來看看程式碼吧
amfupload.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="16" xmlns:net="flash.net.*"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.events.ResultEvent; //選擇檔案後先在 LOCAL 作讀取動作 *注意一定要 FLASH PLAYER 10 以上 private function selectHandler(event:Event):void{ this.fr.load(); } //讀取完成後把上傳檔案按鈕打開 private function completeHandler(event:Event):void{ this.uploadBtn.enabled = true ; this.filename.text = this.fr.name; } //建立一個 OBJECT 把資料內容放進去,並且利用 AMFPHP 上傳 private function uploadHandler():void{ var vo:Object = new Object(); vo.fileName = this.fr.name; vo.fileData = this.fr.data; this.remoting.upload(vo); this.progressbar.visible = true ; } //存等成功資訊 private function resultHandler(event:ResultEvent):void{ if(event.result.success == true){ Alert.show("上傳成功!,存檔完成"); this.progressbar.visible = false ; } } ]]> </mx:Script> <mx:Label text="corAusir 範例 - 使用 AMFPHP 上傳檔案存檔"/> <mx:HBox width="330"> <mx:TextInput id="filename" text="請點擊選擇檔案..." width="100%" editable="false"/> <mx:Button label="瀏覽檔案" cornerRadius="0" buttonMode="true" click="this.uploadBtn.enabled=false;this.fr.browse();"/> </mx:HBox> <mx:HBox width="330"> <mx:ProgressBar width="100%" id="progressbar" indeterminate="true" visible="false"/> <mx:Button id="uploadBtn" enabled="false" label="上傳檔案" click="uploadHandler()" cornerRadius="0" buttonMode="true"/> </mx:HBox> <net:FileReference id="fr" select="selectHandler(event);" complete="completeHandler(event)"/> <mx:RemoteObject id="remoting" destination="amfphp" source="amfupload.fileupload" showBusyCursor="true" result="resultHandler(event)"/> </mx:Application> |
fileupload.php
<?php define("UPLOADS_DIR",""); class fileupload{ public function upload($vo){ try{ file_put_contents ($vo['fileName'],$vo['fileData']->data); //unlink(UPLOADS_DIR.$vo['fileName']); $obj['success'] = true; }catch(Exception $e){ $obj['success'] = false; $obj['error'] = $e->getMessage(); } return $obj; } } ?> |
Random Posts
Loading…
相關文章 :
![showExample1111[1] showExample1111[1]](http://files.corausir.org/images/AMFPHP1.9bytearrayFileReference_10A00/showExample11111.jpg)









我在FLEX中編譯this.fr.load();時出現了
1061: 呼叫可能未定義的方法 load (透過靜態類型 flash.net:FileReference 的參考)。
這是??
@forgot
原來是要在FlexCompiler裡面把Flash的版本設為10以上才可以
又有問題啦 這只可以上傳圖檔?
是否有可以上傳檔案的?
像是.DAE檔,文件檔之類的
@forgot
怎麼一直在自問自答 ==!!
可以傳其他類型的檔案,只是不能太大
@forgot
抱歉啦~ 最近比較忙 回的比較慢
關於第一個問題~ 沒錯~ 一定要 FLASH PLAYER 10.0.0 以上才可以喔~
第二個問題是 可以 LOAD 沒問題
但是你要先上傳 SERVER 然後再用 PV3D 讀出網路上的 DAE
或是你要直接讀出資料塞進去應該也是可以~ 反正都是文字檔
我將localhost改成我的IP(固定的)
原本的是http://localhost/AA-debug/AA.html
改成http://我的IP/AA-debug/AA.html
就無法上傳了 請問這是?
@forgot
剛剛在跟組羊研究
首先 把.xml檔裡的gateway改成你的IP
接著 再去FlexServe裡面改url(好像可以不做)
最後 也是最重要的一點 去走動走動 休息一下
(跟組羊在那邊研究半天研究不出來
最後去上個廁所回來就可跑,太誇張)
@forgot
-.- 永遠在鬼打牆的迴圈內~~
WHILE(鬼打牆){
春青與熱情 -= 10 ;
}
你好,我想請教一下,我已經將flash player安裝為10了
但還是會出現
1061: 呼叫可能未定義的方法 load (透過靜態類型flash.net:FileReference 的參考)。
這樣的狀況該如何排除呢?
@兔
hi 兔
你必須要在 flex 專案的 compiler 的地方強制設定
flashplayer 必須要在 10.0.0 以上喔