it will be long ...
So! Steps:
- Open the viewport.
- Listen to user file
- Set the selected file to a variable
- .
- , ().
- .
- .
.
MXML ():
<s:Button id="bttSelectFile" label="Select file" click="selectFile()"/>
<s:Button id="bttUpload" label="Upload file" click="upload()"/>
<mx:ProgressBar id="progressBar" labelPlacement="center" label="0%" width="300" height="40"
horizontalCenter="0" verticalCenter="0" alpha="0"
minimum="0" maximum="100" indeterminate="false" mode="manual"/>
ActionScript:
import mx.controls.Alert;
private const UPLOAD_URL:String='uploadFile.php';
private var fileReference:FileReference;
private function init():void
{
initializeFileReference();
}
private function initializeFileReference():void
{
fileReference=new FileReference();
fileReference.addEventListener(Event.SELECT,fileSelectHandler);
fileReference.addEventListener(Event.CANCEL,fileCancelHandler);
fileReference.addEventListener(HTTPStatusEvent.HTTP_STATUS,fileErrorHandler);
fileReference.addEventListener(IOErrorEvent.IO_ERROR,fileErrorHandler);
fileReference.addEventListener(SecurityErrorEvent.SECURITY_ERROR,fileErrorHandler);
fileReference.addEventListener(ProgressEvent.PROGRESS,fileProgressHandler);
fileReference.addEventListener(Event.COMPLETE,fileCompleteHandler);
fileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fileDataCompleteHandler);
}
private function killFileReference():void
{
fileReference.removeEventListener(Event.SELECT,fileSelectHandler);
fileReference.removeEventListener(Event.CANCEL,fileCancelHandler);
fileReference.removeEventListener(HTTPStatusEvent.HTTP_STATUS,fileErrorHandler);
fileReference.removeEventListener(IOErrorEvent.IO_ERROR,fileErrorHandler);
fileReference.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,fileErrorHandler);
fileReference.removeEventListener(ProgressEvent.PROGRESS,fileProgressHandler);
fileReference.removeEventListener(Event.COMPLETE,fileCompleteHandler);
fileReference.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fileDataCompleteHandler);
fileReference=null;
}
private function selectFile():void
{
try
{
bttSelectFile.enabled=false;
fileReference.browse(getTypes());
}
catch(e:Error){bttSelectFile.enabled=true;Alert.show("Cannot browse for files.","Error");}
}
private function getTypes():Array
{
var allTypes:Array=new Array(getImageTypeFilter());
return allTypes;
}
private function getImageTypeFilter():FileFilter
{
return new FileFilter("Images(*.jpg, *.jpeg)","*.jpg;*.jpeg;");
}
private function fileSelectHandler(event:Event):void
{
bttSelectFile.enabled=true;
bttSelectFile.label=fileReference.name;
}
private function fileCancelHandler(event:Event):void
{
bttSelectFile.enabled=true;
}
private function valid():Boolean
{
var result:Boolean=true;
if(fileReference==null)
{
result=false;
bttSelectFile.errorString='You have not selected a file.';
}
return result;
}
private function upload():void
{
if(valid())
{
bttSubmit.enabled=false;
startUpload();
}
}
private function startUpload():void
{
try
{
fileReference.upload(new URLRequest(UPLOAD_URL),"myPicture");
}
catch(e:Error)
{
Alert.show("Zero-byte file selected.","Error");
}
}
private function fileErrorHandler(event:Event):void
{
Alert.show("File upload failed.","Error");
Alert.show(event.toString());
}
private function fileProgressHandler(event:ProgressEvent):void
{
var percentage:uint= Math.round(event.bytesLoaded*100/event.bytesTotal);
progressBar.setProgress(percentage,100);
progressBar.label=percentage+'%';
}
private function fileCompleteHandler(event:Event):void
{
bttSelectFile.enabled=true;
}
private function fileDataCompleteHandler(event:DataEvent):void
{
var response:String=event.data;
if(response=='3'){Alert.show("Selected file is not a JPG.","Error");}
else if(response=='0'){Alert.show("File upload failed.","Error");}
else
{
}
}