<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()" >
<fx:Script>
<![CDATA[
import mx.controls.Alert;
private var _uploadURLRequest:URLRequest;
private var _fileRef:FileReference;
private function init():void{
_uploadURLRequest = new URLRequest();
_uploadURLRequest.url = "http://localhost/upload/uploadPHP.php";
_fileRef = new FileReference();
configureListeners(_fileRef);
}
private function configureListeners(dispatcher:IEventDispatcher):void{
dispatcher.addEventListener(Event.SELECT,onSelect);
dispatcher.addEventListener(ProgressEvent.PROGRESS,onProgress);
dispatcher.addEventListener(Event.COMPLETE,onComplete);
//dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUploadComplete);
}
private function onSelect(event:Event):void{
_fileRef = FileReference(event.target);
uploadBtn.enabled = true;
picSrc.text = _fileRef.name;
}
private function doSelect():void{
var fileFilter:FileFilter = new FileFilter("Images(*.jpg,*.jpeg,*.gif,*.png)",
"*.jpg;*.jpeg;*.gif;*.png");
var allTypes:Array = new Array(fileFilter);
_fileRef.browse(allTypes);
}
private function doUpload():void{
var variables:URLVariables = new URLVariables();
variables.username= "ddonng";
variables.filename = "user_name" + "_"+ new Date().time;
variables.extension = _fileRef.extension;
_uploadURLRequest.method = URLRequestMethod.POST;
_uploadURLRequest.data = variables;
_fileRef.upload(_uploadURLRequest);
progressBar.visible = true;
}
private function onProgress(event:ProgressEvent):void{
progressBar.setProgress(event.bytesLoaded/event.bytesTotal*100,100);
progressBar.label = "當前進度" + (event.bytesLoaded/event.bytesTotal*100) + "%";
}
private function onComplete(event:Event):void{
Alert.show("圖片上傳成功!","TIP");
uploadBtn.enabled = false;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:VGroup>
<s:TextInput id="picSrc" />
<s:Button id="browseBtn" label="瀏覽圖片" click="doSelect()"/>
<s:Button id="uploadBtn" label="上傳文件" click="doUpload()" enabled="false"/>
<mx:ProgressBar id="progressBar" minimum="0" maximum="100"
label="當前進度 0%" visible="false" mode="manual"/>
</s:VGroup>
</s:WindowedApplication>
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init();" > <fx:Script> <![CDATA[ import
flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.utils.ByteArray; import
mx.controls.Alert; [Bindable] private var progress:Number = 0; private
var contentLength:int = 0; private var fileDir:File; private var file:File; private var startPoint:int = 0; private
var endPoint:int = 0; private var rangeLoader:URLLoader; private var range:int = 50000; [Bindable] private
var downloadStatus:Boolean = false; private function init():void { var dotSplitLength:uint
= videoURL.text.split("/").length;//這兩行代碼是爲了獲取下載文件的名稱 var fileName:String = videoURL.text.split("/")[dotSplitLength-1]; var
username:String = "iove86";//如果多用戶,則這裏取出用戶名來建目錄(我需要的功能) var downloadDir:String = "F:/myfiles/"+username+"/"; fileDir
= new File(downloadDir);//File可以是文件也可以是目錄,但是要用來創建目錄時,顯然不能爲文件 try{ fileDir.createDirectory(); }catch(err:Error){ Alert.show("文件建立發生錯誤!","MSG"); } file
= new File(downloadDir+fileName);//創建一個和下載文件名稱一致的文件,保存在D盤temp目錄下 } private function
doDownload():void {//先發送一個下載請求,可以得到文件的真實尺寸 var getContentLengthRequest:URLRequest = new URLRequest(videoURL.text); var
getContentLengthLoader:URLLoader = new URLLoader(); getContentLengthLoader.addEventListener(ProgressEvent.PROGRESS ,function(e:ProgressEvent):void { contentLength
= getContentLengthLoader.bytesTotal;//得到文件的真實尺寸 getContentLengthLoader.close();//停止下載 downloadByRange();//按照斷點續傳的方式下載 }); getContentLengthLoader.load(getContentLengthRequest); }
private function downloadByRange():void {//按照斷點續傳的方式下載 downloadStatus = true; var
fileStr:FileStream = new FileStream(); if(file.exists) {//如果文件是存在的,就說明下載過,需要計算從哪個點開始下載 fileStr.open(file,
FileMode.READ); startPoint = fileStr.bytesAvailable;//計算從哪個點開始下載 fileStr.close();//關閉文件流 } trace("start:"+startPoint); if(startPoint+range >
contentLength) {//確定下載的區間範圍,比如0-10000 endPoint = contentLength; } else { endPoint = startPoint+range; } var rangeRequest:URLRequest = new URLRequest(videoURL.text); var header:URLRequestHeader = new URLRequestHeader("Range", "bytes="+startPoint+"-"+endPoint);//注意這裏很關鍵,我們在請求的Header裏包含對Range的描述,這樣服務器會返回文件的某個部分
rangeRequest.requestHeaders.push(header);//將頭信息添加到請求裏 rangeLoader = new URLLoader(); rangeLoader.dataFormat = URLLoaderDataFormat.BINARY;//設置數據類型爲字節 rangeLoader.addEventListener(Event.COMPLETE ,function(e:Event):void { var currentData:ByteArray = rangeLoader.data;//得到下載的數據
fileStr = new FileStream(); fileStr.open(file, FileMode.UPDATE); fileStr.position = fileStr.bytesAvailable;//將指針指向文件尾 fileStr.writeBytes(currentData, 0, currentData.length);//在文件中寫入新下載的數據 fileStr.close();//關閉文件流 progress = endPoint/contentLength * 100;//計算下載進程
if(progress < 100) { downloadByRange();//如果下載沒有完成,則執行下一個斷點下載,直到下載完畢整個文件 } }); rangeLoader.load(rangeRequest);//發起請求 }
private function pause():void {//暫停下載 downloadStatus = false; rangeLoader.close(); }
private function open():void { file.openWithDefaultApplication(); } ]]> </fx:Script> <fx:Declarations> <!--
Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <mx:Form
x="29" y="26" width="50%" height="309"> <mx:FormItem
label="URL"> <mx:TextInput id="videoURL" width="253"
text="http://levis.ogilvy.com.cn/hk/media/background.mp3"/> </mx:FormItem> <mx:FormItem
label="進度"> <mx:Label text="{progress+'%'}"/> </mx:FormItem> <mx:FormItem
label="Label"> <mx:Button label="下載" click="doDownload();btDownload.visible=false"
id="btDownload"/> </mx:FormItem> <mx:FormItem
label="Label"> <mx:Button label="暫停" visible="{downloadStatus}"
click="pause()"/> <mx:Button label="繼續" visible="{!downloadStatus}"
click="downloadByRange()"/> <mx:Button label="打開" visible="{progress==100}"
click="open()"/> </mx:FormItem> </mx:Form> </s:WindowedApplication> |
來自:http://iove86.sinaapp.com/adobe-air/air-upload-and-download-file.html
|