거의 기본적인 기능으로 구현된 업로드 매너저를 만들어 보았다.
파일을 선택했을때 파일명과 파일이 저장된 저장경로를 사용자 이벤트를 통하여 디스패치 시켰다.
UploadMgr.as
-
package managers
-
{
-
import events.UploadEvent;
-
-
import flash.events.DataEvent;
-
import flash.events.Event;
-
import flash.events.EventDispatcher;
-
import flash.events.IOErrorEvent;
-
import flash.events.SecurityErrorEvent;
-
import flash.net.FileFilter;
-
import flash.net.FileReference;
-
import flash.net.URLRequest;
-
-
import mx.controls.Alert;
-
-
public class UploadMgr extends EventDispatcher
-
{
-
private var _fileRef:FileReference;
-
private var _fileSavePath:String;
-
-
public function get fileSavePath():String
-
{
-
return _fileSavePath
-
}
-
-
public function UploadMgr()
-
{
-
_fileRef = new FileReference();
-
_fileRef.addEventListener(Event.SELECT, fileSelectHandler);
-
_fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileUploadCompleteDataHandler);
-
_fileRef.addEventListener(IOErrorEvent.IO_ERROR, fileIOErrorHandler);
-
_fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, fileSecuErrorHandler);
-
}
-
-
public function onFileBrowser():void
-
{
-
_fileRef.browse(setFileFilter());
-
}
-
-
private function setFileFilter():Array
-
{
-
var filter0:FileFilter =
-
new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
-
-
var filterSet:Array = new Array();
-
filterSet.push(filter0);
-
-
return filterSet;
-
}
-
-
{
-
var request:URLRequest = new URLRequest();
-
request.url = url;
-
-
_fileRef.upload(request);
-
}
-
-
private function fileSelectHandler(event:Event):void
-
{
-
var name:String = event.currentTarget.name;
-
var e:UploadEvent = new UploadEvent(name, UploadEvent.SELECT);
-
-
dispatchEvent(e);
-
}
-
-
private function fileUploadCompleteDataHandler(event:DataEvent):void
-
{
-
var fileSavePath:String = event.data.toString();
-
var e:UploadEvent = new UploadEvent(fileSavePath, UploadEvent.COMPLETE_DATA);
-
-
dispatchEvent(e);
-
}
-
-
private function fileIOErrorHandler(event:IOErrorEvent):void
-
{
-
Alert.show("IO Error");
-
}
-
-
private function fileSecuErrorHandler(event:SecurityErrorEvent):void
-
{
-
Alert.show("Security Error");
-
}
-
}
-
}
파일필터를 추가할땐 fileSet배열에 추가시켜주면 된다.
UploadEvent.as
-
package events
-
{
-
import flash.events.Event;
-
-
public class UploadEvent extends Event
-
{
-
public static const SELECT:String = "select";
-
public static const COMPLETE_DATA:String = "completeData"
-
-
public var result:Object;
-
-
public function UploadEvent(result:Object, type:String, bubbles:Boolean=false)
-
{
-
super(type, bubbles);
-
this.result = result;
-
}
-
-
override public function clone():Event
-
{
-
return new UploadEvent(result, type, bubbles);
-
}
-
}
-
}
적용 액션스크립트 코드
-
import events.UploadEvent;
-
import managers.UploadMgr;
-
-
private var uploadMgr:UploadMgr;
-
-
private function init():vod
-
{
-
uploadMgr = new UploadMgr();
-
uploadMgr.addEventListener(UploadEvent.SELECT, fileSelectHandler);
-
uploadMgr.addEventListener(UploadEvent.COMPLETE_DATA, fileUploadCompleteDataHandler);
-
}
-
-
private function fileSelectHandler(event:UploadEvent):void
-
{
-
var fileName:String = event.result.toString();
-
}
-
-
private function fileUploadCompleteDataHandler(event:UploadEvent):void
-
{
-
var fileSavePath:String = event.result.toString();
-
}
기본 컴포넌트 그대로 사용하면 한글 입력시 입력반응속도에 버퍼가 있는걸 느낄것이다.
해결방법은...
TextInput만 가지고 설명하겠다.
TextArea도 TextInput과 같이 해결해주면 된다.
사용자 컴퍼넌트를 만들어 처리해주면 될텐데
mxml 사용자 컴포넌트와 액션스크립트 사용자 컴포넌트 두가지를 만들어 봤으며
돌아가는 방식은 동일하다.
일단 comp라는 패키지에 두가지 방법을 다 구현해 보겠다.
사용자 정의 컴포넌트 방식 - TxtInput.mxml
comp라는 폴더에 TextInput을 베이스로 하는 사용자 컴포넌트를 생성한다.
focusIn, focusOut 이벤트에 textField.alwaysShowSelection 값을 적용시켜준다.
액션스크립트 클래스 방식 - TxtInput.as
돌아가는 내용은 같다.
사용법 또한 같다.
다만 as가 generated 과정이 없으니 아~주~~ 미세하나마 속도가 났겠지..
두가지 경우 모두
xmlns:comp="comp.*" 네임스페이스 등록하고
<comp:TxtInput /> 사용하면 된다.
해결방법은...
TextInput만 가지고 설명하겠다.
TextArea도 TextInput과 같이 해결해주면 된다.
사용자 컴퍼넌트를 만들어 처리해주면 될텐데
mxml 사용자 컴포넌트와 액션스크립트 사용자 컴포넌트 두가지를 만들어 봤으며
돌아가는 방식은 동일하다.
일단 comp라는 패키지에 두가지 방법을 다 구현해 보겠다.
사용자 정의 컴포넌트 방식 - TxtInput.mxml
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:TextInput xmlns:mx="http://www.adobe.com/2006/mxml"
-
focusIn="onFocusIn()"
-
focusOut="onFocusOut()">
-
-
<mx:Script>
-
<![CDATA[
-
private function onFocusIn():void
-
{
-
textField.alwaysShowSelection = true;
-
}
-
private function onFocusOut():void
-
{
-
textField.alwaysShowSelection = false;
-
}
-
]]>
-
</mx:Script>
-
-
</mx:TextInput>
comp라는 폴더에 TextInput을 베이스로 하는 사용자 컴포넌트를 생성한다.
focusIn, focusOut 이벤트에 textField.alwaysShowSelection 값을 적용시켜준다.
액션스크립트 클래스 방식 - TxtInput.as
-
package comp
-
{
-
import flash.events.FocusEvent;
-
-
import mx.controls.TextArea;
-
-
public class TxtArea extends TextArea
-
{
-
public function TxtArea()
-
{
-
super();
-
-
addEventListener(FocusEvent.FOCUS_IN, onFocusInHandler);
-
addEventListener(FocusEvent.FOCUS_OUT, onFocusOutHandler);
-
}
-
-
private function onFocusInHandler(event:FocusEvent):void
-
{
-
textField.alwaysShowSelection = true;
-
}
-
-
private function onFocusOutHandler(event:FocusEvent):void
-
{
-
textField.alwaysShowSelection = false;
-
}
-
}
-
}
돌아가는 내용은 같다.
사용법 또한 같다.
다만 as가 generated 과정이 없으니 아~주~~ 미세하나마 속도가 났겠지..
두가지 경우 모두
xmlns:comp="comp.*" 네임스페이스 등록하고
<comp:TxtInput /> 사용하면 된다.

Prev
Rss Feed