我正试图在
上的flash action script 3.0中开发多文件上传脚本Adobe Flash CS3
这是我的代码:-
FLASH动作脚本:
import flash.net.FileReferenceList;
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.FileReference;
var fileRef:FileReferenceList = new FileReferenceList();
var uploadURL:URLRequest = new URLRequest();
var uploadPhotoScript:String = "http://localhost/as3/1.php";
uploadURL.url = uploadPhotoScript;
var totalFiles:int = 0;
btn_browse.addEventListener(MouseEvent.CLICK, onUploadClicked);
function onUploadClicked(e:MouseEvent):void
{
fileRef = new FileReferenceList();
fileRef.browse(new Array( new FileFilter( "Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png" )));
fileRef.addEventListener(Event.SELECT, fileSelectHandler);
}
function fileSelectHandler(event:Event):void {
for each(var fileToUpload:FileReference in fileRef.fileList){
++totalFiles;
uploadSingleFile(fileToUpload);
}
}
function uploadSingleFile(file:FileReference):void {
file.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
file.addEventListener(Event.COMPLETE, onFileUploadComplete);
progressBar.width=2;
file.upload(uploadURL);
file.addEventListener(Event.COMPLETE, completeHandler);
}
function onUploadProgress(e:ProgressEvent):void
{
var f:FileReference = e.currentTarget as FileReference;
var fileName:String = f.name;
var progres:Number = (e.bytesLoaded / e.bytesTotal) * 100;
progressBar1.width=3.5*(progres);
txt_curr.text=""+fileName+"";
prog1.text=""+progres+" %"
}
function completeHandler(event:Event):void {
trace("upload complete");
}
function onFileUploadComplete(e:Event):void
{
--totalFiles;
if(totalFiles == 0){
trace("all file uploaded Successfully !");
progressBar.width=100*3.5;
}
}
其中btn_browse是添加到movie和progressBar的按钮,progressBar1也是分别用于显示所有文件和当前上传文件进度的符号。txt_curr是一个文本框,显示当前正在处理的文件的名称。
PHP:
<?php
if(!empty($_FILES)){
$tmpfile = $_FILES['Filedata']['tmp_name'];
$targetfile = "images/" . $_FILES['Filedata']['name'];
move_uploaded_file($tmpfile, $targetfile);
}
?>
现在我想要的是:
有人能帮我吗?我是新手,正在努力学习。提前谢谢。
您有FileReference
s的数组,而没有进度条的数组。因此,为了回答您的问题:
要添加一组进度条,请声明一个类(比如MovieClip库,但Sprite可以),将其命名为MyProgressBar
,定义视觉效果等,定义一个将对其进行调整的函数,并将其实例添加到这样的集合中:
var myBars:Vector.<MyProgressBar>;
function fileSelectHandler(event:Event):void {
for (var i:int=0;i<fileRef.fileList.length;i++){
++totalFiles;
var myNextBar:MyProgressBar=new MyProgressBar();
myNextBar.y=i*MyProgressBar.theHeight;
myBarHandler.addChild(myNextBar);
myBars.push(myNextBar);
uploadSingleFile(fileRef.fileList[i]);
}
}
这样,fileRef.fileList
中的每个元素将在myBars
中获得相应的元素。然后,当您解析另一个ProgressEvent时,您必须基于e.target
:获得该索引
function onUploadProgress(e:ProgressEvent):void
{
var f:FileReference = e.currentTarget as FileReference;
var i:int=fileRef.fileList.indexOf(f);
var progressBar:MyProgressBar=myBars[i];
var progres:Number = (e.bytesLoaded / e.bytesTotal) * 100;
progressBar.adjustProgress(progres); // this will alter your progress bar
}
你的第四个问题和第一个问题都得到了回答。
关于删除按钮-你应该澄清你想删除什么以及从哪里删除。关于预览-您可以首先使用FileReference.load()
方法,该方法将在本地加载该文件,从而使您能够访问其内容,然后您可以像从Web加载的任何其他文件一样在某处使用addChild()
。