Flash 8 – Upload: Part IV

Schauen wir uns mal an, wie sich ein Batch-Upload umsetzen lässt. Im vorliegenden Beispiel können mehrere Dateien zum Upload ausgewählt werden. Diese werden in eine Upload-Liste eingefügt. Beim Mausklick auf den Upload Button wird die Liste nach und nach abgearbeitet und die Dateien hochgeladen.

In diesem Teil gehe ich nur auf die wichtigstens neuen Code-Abschnitte ein. Für den Batch-Upload wird ein Objekt der Klasse FileReferenceList benötigt. Die Eigenschaft fileList des Objekts ist vom Datentyp Array. Das Array beinhaltet mehrere FileReference Objekte. So lässt sich die Dateigröße des ersten FileReference Objekt der FileReferenceList bspw. so ansprechen.

[code]fileRefList.fileList[0].size[/code]
Mit einer for oder while Schleife lassen sich so alle Eigenschaften des jeweiligen FileReference Objekts auslesen. Das Objekt und ein Listener werden als lokale Eigenschaften der Klasse definiert.
[code]private var fileRefListListener:Object;
private var fileRefList:FileReferenceList;[/code]

Für die Darstellung der Upload-Liste wird eine DataGrid Komponente verwendet:
[code]private var myGrid:mx.controls.DataGrid;
public function MUploader(mc:MovieClip) {

myGrid = target_mc.myGrid;
myGrid.columnNames = [„Name“, „Größe“, „creationDate“,“modDate“];
// Size for Columns
myGrid.getColumnAt(0).width = 120;
myGrid.getColumnAt(1).width = 60;
myGrid.getColumnAt(2).width = 120;
myGrid.getColumnAt(3).width = 120;
// Activate horizontally scrolling
myGrid.hScrollPolicy = „on“;

}[/code]
Nach dem die Dateien zum Upload ausgewählt wurden, wird die DataGrid Komponente entsprechend gefüllt.
[code]private function updateFileInfo():Void {
var fileList:Array = fileRefList.fileList;
for(var i:Number = 0;i maxFileSize) {
result = false;
} else {
result = true;
}
}
if(result == false) {
status_txt.text = „Please reduce the filesize!“;
} else {
checkFileExtension();
}
}
[/code]
Man beachte die erste Zeile „myGrid.removeAll();“. Bei jedem Aufruf der Methode browse() des FileReferenceList Objekts wird das Array (fileList) neu intialisiert. Das lässt sich leider nicht verhindern – dadurch ist ein zusätzliches Hinzufügen von Dateien nicht direkt möglich.
[code]
private function checkFileExtension():Void {
var fileList:Array = fileRefList.fileList;
for(var i:Number = 0;i0) {
// Upload next file
upload();
} else {
// Batch Upload completed
aktTotalSize = 0;
uploadProgress = false;
status_txt.text = „Upload completed“;
progressDisplay_mc._visible = false;
}
}[/code]
Die neue Upload Methode sieht so aus:
[code]public function upload(firstStart:Boolean):Void {
if(fileChecked == true) {
if(firstStart == true) {
uploadProgress = true;
// Overall Filesize Calculation
var fileList:Array = fileRefList.fileList;
overAllSize = 0;
for(var i:Number = 0;iIch bin kein großer Fan der MM-Komponenten (V2 Architektur, Dateigrößen …) – dennoch werden diese Komponenten hier verwendet, da die Erläuterung der Funktionsweise des Flash-Uploads im Vordergrund steht. Als kleines Gimmick werden hier im Fortschrittbalken vertikale Linien eingezeichnet, welche durch ihre x-Position die jeweilige Dateigröße im Fortschrittsbalken symbolisieren.

Falls Ihr Fragen dazu habt, beantworte ich diese natürlich gerne. Schreibt einfach einen Kommentar in den Blog.
Anyway, Part V is coming …

[Edited: Die Online-Demo habe ich eingestellt – kostet einfach Zeit die Uploads in regelmäßigen Abständen zu überprüfen.]
Flash Upload – Version 4.1 Quelldateien herunterladen

13 Gedanken zu „Flash 8 – Upload: Part IV“

  1. >Das lässt sich leider nicht verhindern – dadurch ist ein zusätzliches
    >Hinzufügen von Dateien nicht direkt möglich.

    …aber vielleicht zu umgehen, wenn man alle ausgewählten Files zwischenspeichert in ein weiteres Array, oder? Müsste doch gehen. Dann fügt man immer erst die zwischengespeicherten Files hinzu und dann die durch den Browsedialog hinzugenommenen.

  2. Pedro: Du kannst dem PHP-Script einfach über GET eine Variable mitgeben:
    var myDir:String = „files/“;
    fileRef.upload(„upload.php?destDir=“+myDir);

    Und anschließend im PHP-Script:
    $myDir = $_GET[‚destDir‘];
    foreach ($_FILES as $fieldName => $file) {
    move_uploaded_file($file[‚tmp_name‘], $myDir.$file[’name‘]);
    $myTempFile = $myDir.$file[’name‘];
    chmod($myTempFile,0777);
    }

  3. Hallo,

    Ich bin schon seit längerm auf der Suche nach einen Upload applet und jetzt bin ich auf dein Flash gestossen.
    Genau was ich suche :) und vor allem ohne Applet
    Mit ist nur noch nicht ganz klar, wie das mit den Verzeichnissen funktioniert.

    Ich würde dem Flash gerne mein ausgangs = zielverzeichnis übergeben, da in meiner Gallerie ein upload in verschiedene Verzeichnisse möglich sein soll.
    So wie es hier aussieht, ist mein ausgangsverzeichnis immer das, wo mein swf drin ist. Kann man das irgendwie konfigurieren? Das von Perdo oben ist ja eher der 2. Teil, wo man das ziel verändert. Ich würde ja auch noch die quelle gerne konfigurieren.

    Meine Flashkenntnisse sind eher nicht existent, drum ist ein Satz mehr sicherlich nicht verkehrt. Wenn es sir nichts ausmacht, kannst du mich auch per email kontaktieren.

    Vielen Dank,
    Michael

  4. Es gab einen kleinen Bug in der „checkFileSize“ Methode. Wenn die Dateigröße einer der Dateien als „ok“ eingestuft wurde, wurden damit automatisch auch alle Dateien die zuvor geprüft wurden bestätigt (unabhängig davon ob die Dateigröße der Dateien dem Limit entsprachen).

    Den gleichen Fehler gab es auch in der „checkFileExtension“ Methode.

    Die Version wurde auf 4.1 aktualisiert.
    Dank an Michael! (für den Hinweis)

  5. Servus FlashLovers,
    finde den Uploader echt cool ! Aber verbessern geht immer !

    Ich fände es gut wenn man einen Eintrag aus der liste einfach so per Drag & Drop auf ein Textfeld ziehen könnte und dort erscheint dann der absolute/relative link der Bilddatei, um das ganze quasi in ein kleines CMS einzubauen. Hat da jemand ne Idee für ?!?

    Greetz Andy
    …weiter so

  6. Servus,
    hat jemand ne Ahnung warum das Script auf meinem Server bei Evanzo nicht mehr läuft???
    Es sieht alles so aus als ob es noch geht, Upload Balken geht,.. nur am Ende bekomme ich einen Http – 503 Fehler zurück !!!! Hab schon geschaut was Fehler 503 bedeutet, Rechte gecheckt, bei Evanzo nachgefragt ob sie was geändert haben, aber hilft bisher alles nichts. Wär weiß was es eventuell sein könnte ?????
    Gruss
    micha[a]woodstreet.de

  7. Wenn der Dateiname fehlerhaft ist, z.B. Tag02.Sibille.jpg läßt sich die Datei nicht hochladen… wenn ich es richtig sehe, erkennt er die Extension an dem ersten Punkt im Dateinamen richtig? Wäre es nicht sinnvoller einfach die letzten 3 Buchstaben zu checken? … Wie macht man das? Habe gerade mit Slice und negativen Zahlen probiert, aber mir will es nicht gelingen…

    Ansonsten bin ich von diesem Tutorial hellauf begeistert… so etwas ausgereiftes habe ich bisher noch nicht bewundern können…

    Lieber Gruß
    Chris

  8. Hi, bin ein absoluter noob in sachen PHP.

    Habe auch eine Upload möglichkeit in Flash gesucht un bin hierauf gestossen.

    Mein Problem ist das ganz auf meine Situation umzuschreiben, soll heissen:

    – Wo gebe ich an auf welchen Server hochgeladen werden soll
    – Ausserdem hab ich mitbekommen das der Upload zz. nur für Images ist.
    da ich jedoch eine Flash Seite für ein Music Label mache und anbieten möchte das Künstler Ihre Demo Tracks hochladen können müsste das bei mir auch mit mp3 gehen.

    Wenn mir jemand näheres beantworten könnte wär das nett =)

    Schönen Tag
    mhmmm

  9. Hallo!

    Ich finde den Uploader genial! Nur hab ich leider ein kleines Problem.

    Der Uploader befindet sich bei mir am Webserver in einem per .htaccess geschütztem Verzeichnis. Wenn ich mit IE mich mit User und PW anmelde kann ich ohne Probleme Bilder hoch laden.

    Wenn ich aber mit FireFox auf den geschützten Bereich gehe und dort Bilder hochladen möchte, kommt eine weitere Authentifizierungs-Aufforderung von IE.

    Kann sich das wer erklären? Verwendet Flash nicht den Standard Browser (in meinem Fall FF) zum Upload sondern den IE?

    Hat jemand ähnliche Erfahrungen?

    Geri

Schreibe einen Kommentar zu marthoma Antworten abbrechen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.