Flash AS3 FileReference - Select and Upload Multiple Files one at a time

Hiya

I currently have an swf that allows you to select and display a file and upload it to the server using FileReference. This works great but i need to be able to select and display multiple (up to 25 in some cases) and then upload them all at the end.

I know you can use the FileReferenceList to select multiple files at the same time in the dialog popup but my issue is that the user needs to select one at a time, do stuff to that image, then select another, do stuff and so on… then at the end when they press upload it upload them all onto the server.

Is it possible or is there a way so i can maybe add every new selected file into an array, then at the end it uploads all the files in the array either in one go or loops through each until all objects in the array are complete?

Can anyone help? I’ll post the full code for my working single file upload below.

Please, please help, i’m limited with flash and have only been learning for 3-4 months and i’ve been stuck for over a week now :frowning:

Lauren

as3 Code:


import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.net.FileReference;
import flash.net.FileFilter;
import flash.utils.ByteArray;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.display.MovieClip;
import fl.controls.ProgressBarMode;
import flash.display.Bitmap;
import flash.display.BitmapData;

progressBar.visible=false;
UploadprogressBar.visible=false;

// Create FileReference.
var imageFile:FileReference;

// Create Loader to hold image content
var image_loader:Loader = new Loader();
var image_content:Sprite = new Sprite();

// Get Extension Function.
var imageExtension;

function getExtension($url:String):String {
    var extension:String = $url.substring($url.lastIndexOf(".")+1, $url.length);
    return extension;
}

// Random Number Function to create new filename on server.
function randomNum(low:Number=0, high:Number=1):Number {
	return Math.floor(Math.random() * (1+high-low)) + low;
}
var myNumber:Number= randomNum(1000,9999);
var myString:String= String(myNumber);
var RandomNumbers = myString;
var imageFilePath = (RandomNumbers);

// Select Button Function.
select_btn.addEventListener(MouseEvent.CLICK, onselect_btnClicked);

function onselect_btnClicked(event:MouseEvent):void {
	imageFile=new FileReference();
	imageFile.addEventListener(Event.SELECT, onFileSelected);
	var imageTypeFilter:FileFilter = new FileFilter("JPG/PNG Files","*.jpeg; *.jpg;*.gif;*.png");
	imageFile.browse([imageTypeFilter]);
}

// File Selected Function.
function onFileSelected(event:Event):void {
	imageFile.addEventListener(Event.COMPLETE, onFileLoaded);
	imageFile.addEventListener(ProgressEvent.PROGRESS, onProgress);
	var imageFileName = imageFile.name;
	imageExtension = getExtension(imageFileName);
	imageFile.load();

	progressBar.visible=true;
	progressBar.mode=ProgressBarMode.MANUAL;
	progressBar.minimum=0;
	progressBar.maximum=100;
	UploadprogressBar.mode=ProgressBarMode.MANUAL;
	UploadprogressBar.minimum=0;
	UploadprogressBar.maximum=100;
}

// File Progress Function.
function onProgress(event:ProgressEvent):void {
	var percentLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
	progressBar.setProgress(percentLoaded, 100);
}

// File Loaded Function.
function onFileLoaded(event:Event):void {
	var fileReference:FileReference=event.target as FileReference;

	var data:ByteArray=fileReference["data"];
	var movieClipLoader:Loader=new Loader();
	movieClipLoader.loadBytes(data);
	movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMovieClipLoaderComplete);

	imageFile.removeEventListener(Event.COMPLETE, onFileLoaded);
	imageFile.removeEventListener(ProgressEvent.PROGRESS, onProgress);
}

// Load Image onto Stage Function.
function onMovieClipLoaderComplete(event:Event):void {
	var loadedContent:DisplayObject=event.target.content;
	image_loader =event.target.loader as Loader;
	
	var scaleWidth:Number=345/image_loader.width;
	image_loader.scaleX=image_loader.scaleY=scaleWidth;
	image_loader.height=200;
	image_loader.scaleX=image_loader.scaleY;
	image_loader.x=10;
	image_loader.y=10;
	
	image_content.buttonMode=true;
	image_content.addChild(image_loader);
	addChild(image_content);
}

// Upload Button Function.
upload_btn.addEventListener(MouseEvent.CLICK, onupload_btnClicked);

function onupload_btnClicked(event:MouseEvent):void {
	var filename:String=imageFile.name;
	var urlRequest:URLRequest = new URLRequest("http://www.xxxxx.com/xxxxx/file-reference.php");
	var variables:URLVariables = new URLVariables();
	urlRequest.method = URLRequestMethod.POST;
	imageFile.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
 	imageFile.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUploadComplete);
	variables.ID = (RandomNumbers);
	urlRequest.data = variables;
	imageFile.upload(urlRequest);
}

// File Upload Progress Function.
function onUploadProgress(event:ProgressEvent):void {
	var percentLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
	UploadprogressBar.setProgress(percentLoaded, 100);
	trace("loaded: "+percentLoaded+"%");
	upload_status_txt.text='upload in progress...';
}

// Upload File Completed Function.
function onUploadComplete(event:Event):void {
	upload_status_txt.text='upload complete';
	imageFile.removeEventListener(ProgressEvent.PROGRESS, onProgress);
	imageFile.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUploadComplete);
	UploadprogressBar.visible=false;
}

php Server Code:


<?php
function getExtension($str) {
	$i = strrpos($str,".");
	if (!$i) { return ""; }
		$l = strlen($str) - $i;
		$ext = substr($str,$i+1,$l);
		return $ext;
}

$fileID = $_POST['ID'];
$filename = basename( $_FILES['Filedata']['name']);

$extension = getExtension($filename);
$extension = strtolower($extension);
$uploadID = $fileID.'.'.$extension;
if (move_uploaded_file($_FILES['Filedata']['tmp_name'], "images/".$uploadID))
{
     echo "OK";
}
else
{
     echo "ERROR";
}
?>