PHP: Jede Datei ein neuer Request bei Flashupload, wie alle Dateien gemeinsam in PHP verarbeiten?

klausschreiber

Well-known member
ID: 162475
L
6 Mai 2006
247
8
Hallo,

der Threadtitel ist etwas komisch, aber mir fiel nichts besseres ein.
Ich will bei meinem Script, dass Dateien verarbeitet einen Upload per Flash anbieten (werde wohl Uploadify für jQuery nehmen). Bei einem normalen Upload habe ich ja Zugriff auf alle Dateien mittels dem $_FILES Array. Uploadifiy sendet jedoch jede Datei einzeln, also macht für jede Dateien einen neuen Request. Laut Google kann Flash die Dateien anscheinend auch nur einzeln senden.

Ich brauche in meinem Script aber alle Dateien auf einmal. Die hochgeladenen Dateien speichert PHP ja in einem temporären Ordner. Aber ich vermute mal, dass PHP die Datei nach Beenden des Scriptes wieder löscht und ich so beim nächsten Request nicht mehr drauf zugreifen kann, oder?

Meine Idee war nun, selber einen temporären Ordner zu erstellen. In diesem temporären Ordner wollte ich dann bei jedem Upload einen Ordner, der nach der Session-ID des Users benannt ist, erstellen und dort die Dateien dann zwischenspeichern. Dann habe ich auf alle Dateien auf einmal Zugriff und wenn das Script fertig ist, kann es ja den Ordner inklusiv der Dateien wieder löschen.

Etwas umständlich ist der Weg aber natürlich schon. Gibt es da einen besseren/einfacheren Weg?


Gruß,
Klaus
 
Danke für die Antwort.

Ich hatte auch zuerst überlegt, nach einem Flashupload zu suchen, der die Dateien auf einmal schickt, aber scheinbar kann Flash das gar nicht.
Wenn die Methode FileReferenceList.browse() aufgerufen wurde und ein Benutzer mindestens eine Datei aus dem mit der Methode browse() geöffneten Dialogfeld ausgewählt hat, wird diese Eigenschaft mit einem Array von FileReference-Objekten aktualisiert, die die vom Benutzer ausgewählten Dateien darstellen. Sie können dieses Array verwenden, um die einzelnen Dateien mit der Methode FileReference.upload() hochzuladen. Sie können nicht mehrere Dateien auf einmal hochladen.
(https://help.adobe.com/de_DE/AS3LCR/Flash_10.0/flash/net/FileReferenceList.html)
 
Ja, mit Javascript ginge es. Aber mit Javascript kann ich keine Fortschrittsanzeige machen und der User kann auch nicht mehrere Dateien auf einmal auswählen, indem er mehrere Dateien markiert. Die Mehrfachauswahl wäre nun nicht unbedingt das Wichtigste, aber eine Fortschrittsanzeige hätte ich schon gerne.
Es gibt da zwar irgendeine ziemliche unbekannte Erweiterung für PHP, aber die werden wohl die wenigsten Hoster installiert haben.

Gruß,
Klaus
 
Bin mir grad nicht sicher, aber wenn du die Content-length der Post-Daten aus dem AJAX-Objekt herauskriegst, und dann ein zweites Request-Objekt erstellst, an ein PHP-Skript, das die temporären Daten ausliest, und die Dateigröße bestimmst, könntest du dir die Prozent ausrechnen :think:

Die Frage ist, ob das nicht auch zu komplex ist (wenn durch das Request-Objekt überhaupt möglich) :think:
 
Danke für deine Antwort.

Ja, wenn ich die Größe der temporären Dateien bestimmen könnte während dem Upload, dann könnte ich damit eine Fortschrittsanzeige machen. Das Problem ist aber, dass ich ja den Dateinamen der temporären Datei erst weiß, nachdem der Upload fertig ist.
Mithilfe der PECL-Erweiterung APC ist anscheinend eine Fortschrittsanzeige möglich, aber die hat mein Hoster nicht installiert und folgende Warnung klingt auch nicht gerade toll:
Zu beachten ist, dass die Upload-Verfolgung derzeit nicht threadsafe ist. Uploads, die starten, während ein anderer Upload noch läuft, schalten die Verfolgung für den laufenden Upload ab.
Gruß,
Klaus

edit:
mit Flash10 kannst du die Daten erst in den Ram laden und dann manuell zusammen verschicken ;)
Heißt das, die Dateien werden beim User in den Ram geladen und dann gemeinsam verschickt, sodass ich dann ein vollständiges $_FILES-Array mit allen Dateien auf einmal habe?
Das wäre ja cool. Das Problem ist dann nur noch, dass ich so einen Uploader finden muss im Netz, weil ich selber leider absolut kein Flash kann. (Ich denke mal, dass das ja schon etwas komplizierter ist und ich das nicht mal eben in ein paar Tagen programmieren kann ohne Vorkenntnisse?).
 
Zuletzt bearbeitet:
Ich würde an dieser Stelle Sessions nutzen. Der Flash-Uploader sollte die Session-Cookies mitsenden. Wenn nicht, kann man notfalls die Session-ID mit übergeben.

Dann könnte man jeden einzelnen Upload auf den kompletten Upload-Vorgang an sich beziehen.
Und schließlich wenn alles hochgeladen ist, die Dateien, die man irgendwo wiedererkennbar mit der Session-ID gespeichert hat, verarbeiten.
 
Danke für eure Antworten

@Raze:
vielen Dank. Hat zwar nicht den gleichen Komfort wie Flash, aber solange ich nichts Anderes habe, die perfekte Lösung.

@shenziro:
Ja, das war auch meine Idee, praktisch einen Temporären Ordner zu haben, den ich selber per PHP verwalte. Das ist halt ziemlich aufwendig.

@ice-breaker:
Hast du zufällig einen Link oder so, wo diese Methode beschrieben wird?
 
https://livedocs.adobe.com/flash/9.0_de/main/wwhelp/wwhimpl/js/html/wwhelp.htm

Da sollte schon was zu stehen (auch wenn das jetzt ein allgemeiner Link ist.. mir hilft eine kurze Suche bei unverständnis dort eigentlich so gut wie immer weiter) ;)

LG
So, komme erst jetzt wieder dazu.
Danke für den Link, aber dort habe ich schon geschaut und leider nichts gefunden. Das scheint ja aber auch eine Doku zu Flash 9 zu sein. Ich habe zwar inzwischen die Neuere Doku (https://help.adobe.com/de_DE/Flash/10.0_Welcome/index.html) gefunden, aber auch dort leider nichts Brauchbares zu meinem Problem. Vielleicht verwende ich auch die falschen Suchbegriffe.

Falls sich nicht doch noch jemand jemand damit genauer auskennt, werde ich es jetzt wohl doch so machen, dass ich die Dateien in einem Verzeichnis speichere und dann gemeinsam verarbeite.
Mir ist nun die Idee gekommen, dass ich die Flash-Uploads ja an eine extra PHP-Datei schicken kann, die die Dateien in einen Ordner speichert und die Infos nach Art des $_FILES Arrays in eine Session speichert. Nach dem Upload kann ich ja dann per Javascript noch das eigentliche Formular an die PHP-Datei senden, die dann alles verarbeitet.
Dann brauche ich die eigentliche PHP-Datei nicht groß verändern und sie kann weiterhin auch problemlos Dateien entgegennehmen, die nicht per Flash hochgeladen wurden.
Und für die, die kein Flash installiert haben, aber Javascript aktiviert haben, kann ich dann das von Raze vorgeschlagene Script verwenden.


Gruß,
Klaus