HTML5 – Hochladen von Dateien

Wenn wir Datenerfassungsformulare in einer HTML5- Seite haben und nicht nur Daten mit Eingabetypfeldern erfassen können, können wir auch Dateien hochladen. Dadurch können wir das Laden bestimmter Daten beschleunigen, die nicht in Text ausgedrückt werden können oder bei denen es sich möglicherweise um sehr umfangreiche Texte handelt. Es ist üblich, dass Bilddateien oder PDF-Dateien hochgeladen werden, da diese beiden Formate sehr beliebt sind. Mit Ajax können wir jedoch fast jeden Dateityp hochladen.

Dateien hochladen

Um Dateien mit Ajax hochzuladen , müssen wir ein Feld vom Typ Datei in unserem Formular erstellen und in unserer Ajax- Routine ein FormData- Objekt verwenden, mit dem wir die Daten sammeln, um ihnen das erforderliche Format zu geben und den Upload unserer Datei auf den Server durchzuführen.

Das FormData- Objekt muss mit Vorsicht verwendet werden, da es möglicherweise noch Versionen von Browsern gibt, die es nicht vollständig unterstützen, es ist jedoch eine sehr solide Lösung.

Sehen wir uns im folgenden Code an, wie Sie eine Basisdatei hochladen:

 <! DOCTYPE HTML> <html> <head> <title> Beispiel </ title> <style> .table {display: table;} .row {display: table-row;} .cell {Anzeige: Tabellenzelle; padding: 5px;} .label {text-align: right;} </ style> </ head> <body> <form id = "fruitform" method = "post" action = "http: // titan: 8080 / form"> <div class = "table"> <div class = "row"> <div class = "cell label"> Bananen: </ div> <div class = "cell"> <input name = "bananas" value = "2" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Äpfel: </ div> <div class = "cell"> <input name = "apples" value = "5" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Kirschen: </ div> <div class = "cell"> <input name = "cherries" value = "20" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Datei: </ div> <div class = "cell"> <input type = "file" name = "file" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Gesamt: </ div> <div id = "results" class = "cell"> 0 Elemente </ div> </ div> </ div> <button id = "submit" type = "submit"> Formular senden </ button> </ form> <script> document.getElementById ("submit"). onclick = handleButtonPress; var httpRequest; Funktion handleButtonPress (e) { e.preventDefault (); var form = document.getElementById ("fruitform"); var formData = neue FormData (Formular); httpRequest = new XMLHttpRequest (); httpRequest.onreadystatechange = handleResponse; httpRequest.open ("POST", form.action); httpRequest.send (formData); } Funktion handleResponse () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { document.getElementById ("results"). innerHTML = httpRequest.responseText; } } </ script> </ body> </ html> 

Beim Einfügen der Eingabetypdatei trifft das FormData- Objekt automatisch die erforderlichen Vorkehrungen, damit unsere Datei auf den Server hochgeladen werden kann. In der folgenden Abbildung sehen Sie, wie der Browser dies interpretiert:

See also  Befehle zum Durchsuchen von Google mit Googler unter Linux

html5_ajax_subir_arch1.jpg

In diesem Fall war es ein ziemlich helles Bild, sodass der Zeitpunkt des Ladens der Datei auf den Server nicht auffällt. Wenn es sich jedoch um ein PDF mit 30 MB handelt, würde die Zeit viel länger dauern, da dies für den Benutzer transparent ist Die Seite “tut nichts” oder “denkt”, um dies zu vermeiden. Wir können einen Fortschrittsbalken einfügen, mit dem der Fortschritt sichtbar wird.

Um den Fortschritt des Uploads anzuzeigen, verwenden wir das XMLHttpRequest- Objekt, um den Status der Ajax- Anforderung zu überprüfen:

 <! DOCTYPE HTML> <html> <head> <title> Beispiel </ title> <style> .table {display: table;} .row {display: table-row;} .cell {Anzeige: Tabellenzelle; padding: 5px;} .label {text-align: right;} </ style> </ head> <body> <form id = "fruitform" method = "post" action = "http: // titan: 8080 / form"> <div class = "table"> <div class = "row"> <div class = "cell label"> Bananen: </ div> <div class = "cell"> <input name = "bananas" value = "2" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Äpfel: </ div> <div class = "cell"> <input name = "apples" value = "5" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Kirschen: </ div> <div class = "cell"> <input name = "cherries" value = "20" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Datei: </ div> <div class = "cell"> <input type = "file" name = "file" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Fortschritt: </ div> <div class = "cell"> <progress id = "prog" value = "0" /> </ div> </ div> <div class = "row"> <div class = "cell label"> Gesamt: </ div> <div id = "results" class = "cell"> 0 Elemente </ div> </ div> </ div> <button id = "submit" type = "submit"> Formular senden </ button> </ form> <script> document.getElementById ("submit"). onclick = handleButtonPress; var httpRequest; Funktion handleButtonPress (e) { e.preventDefault (); var form = document.getElementById ("fruitform"); var progress = document.getElementById ("prog"); var formData = neue FormData (Formular); httpRequest = new XMLHttpRequest (); var upload = httpRequest.upload; upload.onprogress = Funktion (e) { progress.max = e.total; progress.value = e.loaded; } upload.onload = Funktion (e) { progress.value = 1; progress.max = 1; } httpRequest.onreadystatechange = handleResponse; httpRequest.open ("POST", form.action); httpRequest.send (formData); } Funktion handleResponse () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { document.getElementById ("results"). innerHTML = httpRequest.responseText; } } </ script> </ body> </ html> 

Wir haben ein progress- Element definiert und können mit dem XMLHttpRequest-Objekt die Werte zuweisen, während der Upload fortgesetzt wird. Im Browser sehen wir dies wie folgt:

See also  So installieren Sie macOS Catalina unter VMware für Windows 10

html5_ajax_subir_arch2.jpg
Wir können Ajax nicht nur für die Beratung von Elementen auf anderen Seiten verwenden, sondern auch zur Verbesserung unserer Formulare beim Erfassen von Daten.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *