使用Flash Action脚本中的ProgressBar上传多个文件,每个文件都有图像预览和单独的进度条


Multiple File Upload With ProgressBar in Flash Action script with preview of image and individual progress bar for each file

我正试图在
上的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);
}
?>

现在我想要的是:

  • 如何为使用.browse()方法选择的每个文件动态添加进度条
  • 如何在上传到服务器之前显示每个图像的预览
  • 删除按钮如果上传完成
  • 如何与上传的其他文件同时动态显示上传的每个图像及其进度
  • 有人能帮我吗?我是新手,正在努力学习。提前谢谢。

    您有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()