0

我正在尝试在
Adob​​e Flash CS3上的 Flash 动作脚本 3.0 中开发多个文件上传脚本

这是我的代码:-
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() 方法选择的每个文件动态添加进度条?
  • 如何在上传到服务器之前显示每个图像的预览?
  • 上传完成后的删除按钮?
  • 如何在上传其他文件的同时动态显示正在上传的每个图像及其进度?
  • 任何人都可以帮助我吗?我是 Flash 新手,正在努力学习它。提前致谢。

    4

    1 回答 1

    2

    您有FileReferences 数组,但没有进度条数组。所以,回答你的问题:

    要添加一组进度条,请声明一个类(例如 MovieClip 基础,但 Sprite 可以),将其命名为 say 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]);            
        }
    }
    

    这样, in 中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()将在本地加载该文件的方法,从而使您能够访问其内容,然后您可以addChild()像从 Web 加载的任何其他文件一样访问其内容。

    于 2013-07-11T07:24:25.217 回答