Fileupload mit Ajax realisieren

…ist eine Skriptsprache, die die Möglichkeiten von HTML stark erweitert. Sie wird eingesetzt, um Internet-Seiten flexibel und interessant gestalten zu können. Beispiel: Formulare mit Berechnungsfunktionen / animierte Schaltflächen oder einfach fallender Schnee. - Fragen - Antworten –Tipps hier hinein...

Moderator: lauras

Beiträge bitte im neuen Forum

Fileupload mit Ajax realisieren

Beitragvon Yamram » Samstag 28. Januar 2012, 18:26

Hey Leute,
dank kanufrosch habe ich jetzt auch mal Ajax verstanden. Heute habe ich viel programmiert, dabei hatte fast alles mit Ajax zu tun. Es macht echt Spaß! Es ist so einfach und toll... Nun habe ich aber Schwierigkeiten an einer besonderen Stelle. Ich möchte mit Ajax einen Fileupload realisieren. Das erwies sich als schwierig. Ganz normal hatte ich den Upload schon fertig geschrieben. Doch, als ich Ajax einsetzen wollte, gab es ein Problem. Wie ihr bestimmt alle wisst, braucht man für einen Upload den Array $_FILES. Aber wie kann ich den erreichen? Das Formular (ich habe das jetzt mal aus meinem Projekt isoliert) sieht so aus:

Code: Alles auswählen
<form method="post" action="javascript:AjaxUpload();" enctype="multipart/form-data">

   <input type="file" name="file" id="file" />
   <input type="submit" name="submit" />
</form>


Das ist ja alles schön und gut, aber wie soll nun der JS-Code aussehen? Vor allen Dingen folgende Zeile ist nun schwierig:

Code: Alles auswählen
request.send('file=' + document.getElementById("file").value);


Wenn ich das so mache, dann übergibt Javascript nur den kompletten Pfad zur Datei, nicht aber den gebrauchten Array $_FILES. Wie kann ich das umsetzen? Ein Fileupload perAjax wäre schon was feines *____*

Mit freundlichen Grüßen,
Philipp E.
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Fileupload mit Ajax realisieren

Beitragvon drPHIP132 » Samstag 28. Januar 2012, 21:03

Ich weiß nicht ob man dies mit JavaScript realisieren kann, aber wenn ja, dann Lies die Datei aus und du hast einen Ellenlangen Quelltext.
Dann den Code übertragen (wie ajax) und dort als .dateiendung wieder abspeichern (übertragenen code mit php abspeichern).^^
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Fileupload mit Ajax realisieren

Beitragvon Yamram » Samstag 28. Januar 2012, 21:06

Öhm, wenn ich das so machen muss, dann lasse ich das mit Ajax lieber direkt (: Dann ist das halt nicht sooo cool, sondern einfach nur cool ((((:
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Fileupload mit Ajax realisieren

Beitragvon drPHIP132 » Samstag 28. Januar 2012, 21:09

So musst du es nicht machen, aber das ist alles was mir in den Sinn kommt, wie man es machen könnte.^^
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Fileupload mit Ajax realisieren

Beitragvon Yamram » Sonntag 29. Januar 2012, 13:24

Ich glaube, ich baue alles erstmal ganz normal. Wenn alles läuft, gucke ich dann, was ich mit Ajax umsetzen könnte.
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Fileupload mit Ajax realisieren

Beitragvon drPHIP132 » Sonntag 29. Januar 2012, 16:13

aufjedenfall geht es. (siehe facebook)
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Fileupload mit Ajax realisieren

Beitragvon Yamram » Sonntag 29. Januar 2012, 16:14

Ja, es gibt auch diverse Tutorials im Internet. Ich habe bei Google gesucht und etwas gefunden, aber ich konnte es nicht anschauen, weil mein Internet "leer" war >.< Ich hasse es...
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Fileupload mit Ajax realisieren

Beitragvon DerWaldschrat » Sonntag 29. Januar 2012, 19:37

Also, zunächst einmal vorweg: Im Internet-Explorer hast du mit Ajax-Upload keine Chance, zumindest nicht <9 (es sei denn, es gibt da irgendwelche obskuren ActiveX-Objekte, das glaub ich aber nicht).
Ab Firefox 4, Chrome 7 und Safari 5 gibt es aber eine einfache Lösung (auch FF 3.6 geht, dann wirds aber ungemütlich):
https://developer.mozilla.org/en/DOM/XM ... t/FormData
Das FormData-Objekt!
Die Verwendung ist ganz einfach:
Code: Alles auswählen
<script type="text/javascript">
function AjaxUpload() {
  if (FormData && typeof FormData === "function") {
    var data = new FormData(/*DEIN FORMULAR, z.B. über document.getElementById*/),
    xhr = new XMLHttpRequest();
    xhr.open("POST", "fileUpload.php");
    xhr.send(data);
  }
}
</script>

Falls du weitere Fragen hast, einfach stellen!
DerWaldschrat
DerWaldschrat
HTML-Freund
 
Beiträge: 88
Registriert: Freitag 4. Juli 2008, 16:37

Re: Fileupload mit Ajax realisieren

Beitragvon Yamram » Sonntag 29. Januar 2012, 20:07

@DerWaldschrat:

Puhh, das hört sich gut an aber ging mir jetzt ein wenig zu schnell :/ Also, das nehme ich an: Das action-Attribut des Uploadformulars muss ich auf javascript:AjaxUpload(); legen. Dann wird beim Drücken des Submit Buttons die Funktion ausgeführt. In der Funktion diese if-Abfrage verstehe ich überhaupt nicht. Was soll das bedeuten und warum drei gleich-Zeichen oder ist das nur ein Schreibfehler? Anschließend erstellst du eine Variable names data, in der das ganz Formular sein soll? Oder nur das input-Feld mit der Datei? Die nächste beiden Zeilen verstehe ich, weil ich ein wenig Ajax kann. Dann frage ich mich aber, wie die du einfach data in das send() reinpackst? Kannst du mir das nochmal erklären?
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Fileupload mit Ajax realisieren

Beitragvon Sören » Sonntag 29. Januar 2012, 22:34

In der if-Abfrage wird ganz einfach überprüft, ob der Browser FormData kennt, zuerst wird geprüft, ob FormData existiert (wenn es existiert ist der erste Teil der if-Abfrage true) und dann, ob es eine Funktion ist.

Das FormData-Objekt kann in einem XMLHttpRequest key/value-Paare von Formularen (also die Werte der Input-Felder, einschließlich Dateien) senden.
Daher werden data sozusagen die Daten deines Formulars zugewiesen (was eben auch hochzuladende Dateien seien können).
Diese Daten werden dann eben beim senden der Ajax-Anfrage mitgeschickt.
Zitat aus DerWaldschrats Quelle:
Mozilla Developer Network hat geschrieben:Using FormData objects

The FormData object lets you compile a set of key/value pairs to send using XMLHttpRequest. Its primarily intended for use in sending form data, but can be used independently from forms in order to transmit keyed data. The transmitted data is in the same format that the form's submit() method would use to send the data if the form's encoding type were set to "multipart/form-data".
Benutzeravatar
Sören
HTML-Acrobat
 
Beiträge: 851
Registriert: Samstag 5. Juni 2010, 16:00


Beiträge bitte im neuen Forum

Zurück zu JavaScript

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron