1. 먼저 파일 브라우저에서 여러개의 파일을 선택하기 위한 부분 구현이다.
public var _numCurrentUpload:Number = 0; // 파일 인덱스
public var filePosion:uint = 0; // 분할하여 전송중인 파일의 포지션
public var currentFileSize:uint = 0; // 전체 파일중 전송 된 파일의 용량
public var currentFileTotalSize:uint = 0; // 파일 크기 외에 파일 이름등이 포함된 크기의 용량
public var _refUploadFile:FileStream; // 파일 리스트 사용을 위한 파일 레퍼런스
public var _refUploadFiles:File; // 업로드 할 파일
public var _arrUploadFiles:Array; // 업로드할 파일 리스트
// 파일 브라우저에 비디오 파일을 위한 필터를 적용 및 멀티 파일 브라우저 적용
public function addFiles():void {
var _refFilter:FileFilter = new FileFilter("Video(*.flv, *.mp4 , *.3gp)", "*.flv;*.mp4;*.3gp");
_refUploadFiles = new File();
_refUploadFiles.addEventListener(FileListEvent.SELECT_MULTIPLE, onSelectFile);
_refUploadFiles.browseForOpenMultiple("Select Files", [_refFilter]);
}
// 파일 브라우저에서 파일 선택 시 호출 (파일 리스트에 선택한 파일들을 등록한다)
public function onSelectFile(event:FileListEvent):void
{
var arrFoundList:Array = new Array();
for (var i:Number = 0; i < _arrUploadFiles.length; i++) {
for (var j:Number = 0; j < event.files.length; j++) {
if (_arrUploadFiles[i].name == event.files[j].name) {
arrFoundList.push(event.files[j].name);
event.files.splice(j, 1);
j--;
}
}
}
if (event.files.length >= 1) {
for (var k:Number = 0; k < event.files.length; k++) {
var flag:Boolean = new Boolean(true);
_arrUploadFiles.push({
name:event.files[k].name,
size:formatFileSize(event.files[k].size),
file:event.files[k],
flag:flag});
}
listFiles.dataProvider = _arrUploadFiles;
listFiles.selectedIndex = _arrUploadFiles.length - 1;
}
if (arrFoundList.length >= 1) {
Alert.show("The file(s): \n\n• " + arrFoundList.join("\n• ") + "\n\n...are already on the upload list. Please change the filename(s) or pick a different file.", "File(s) already on list");
}
}
// 파일 목록에 추가된 파일 삭제
public function removeFiles():void {
var arrSelected:Array = listFiles.selectedIndices;
if (arrSelected.length >= 1) {
for (var i:Number = 0; i < arrSelected.length; i++) {
_arrUploadFiles[Number(arrSelected[i])] = null;
}
for (var j:Number = 0; j < _arrUploadFiles.length; j++) {
if (_arrUploadFiles[j] == null) {
_arrUploadFiles.splice(j, 1);
j--;
if(_numCurrentUpload > 0){
_numCurrentUpload--;
}
}
}
listFiles.dataProvider = _arrUploadFiles;
listFiles.selectedIndex = 0;
}
trace(_numCurrentUpload);
}
// 추가된 파일의 용량 표시
public function formatFileSize(numSize:Number):String {
var strReturn:String;
numSize = Number(numSize / 1000);
strReturn = String(numSize.toFixed(1) + " KB");
if (numSize > 1000) {
numSize = numSize / 1000;
strReturn = String(numSize.toFixed(1) + " MB");
if (numSize > 1000) {
numSize = numSize / 1000;
strReturn = String(numSize.toFixed(1) + " GB");
}
}
return strReturn;
}