2012-05-10 51 views
3

我目前有一個swf,允許您選擇並顯示一個文件並使用FileReference將其上傳到服務器。這很好,但我需要能夠選擇和顯示多個(在某些情況下最多可以顯示25個),然後在最後將它們全部上傳。Flash AS3 FileReference - 一次選擇並上傳多個文件

我知道你可以使用FileReferenceList在彈出的對話框中同時選擇多個文件,但我的問題是用戶需要一次選擇一個,做一些東西到那個圖像,然後選擇另一個,做東西等等......然後在最後他們按下上傳時將它們全部上傳到服務器上。

是否有可能或有辦法讓我可以將每個新選定的文件添加到數組中,然後最後它會一次性上傳數組中的所有文件或循環遍歷每個文件直到數組是否完整?

任何人都可以幫忙嗎?我將在下面發佈我的工作單文件上傳的完整代碼。

請,請幫幫忙,我很有限的閃光燈和只學了3-4個月,我一直在堅持,現在一個多星期:(

勞倫

AS3代碼:

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服務器代碼:

<?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"; 
} 
?> 

回答

相關問題