HTML5 drag and drop und mehrere Dateien hochladen
Ich habe ein HTML-Formular enthält ein file-input-Feld mit mehreren Datei-Auswahl, und ich habe auch eine drag-and-drop-Funktion, mit der ich arbeite, so gut wie. Meine Frage ist, wie integriert diese beiden features so nahtlos, wenn es überhaupt möglich ist?
Im Idealfall würde ich gerne die Benutzer zu wählen Sie Ihre Dateien entweder durch drag ' N ' Drop oder über den Datei-dialog-box. Sobald der Benutzer fertig ist, die entsprechenden Dateien, klicken Sie auf das Formular die Schaltfläche "senden" hochladen.
Ich denke, die wesentliche Unsicherheit, die ich habe, ist, wie binden Sie die Dateien, die wurden gezogen und ein file-input-Feld für das Formular Vorlage.
- Wo Sie in der Lage, diese Arbeit zu machen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schrieb ich einige jQuery-code, der genau das macht, mir sagen, ob es für Sie arbeitet.
Und die PHP-Datei sieht wie folgt aus:
$('#files').append(files[data].fileName);
es sei denn, ich bin Missverständnis Sie.Ich bin mir nicht ganz sicher, wie du es tust, so werde ich Ihnen sagen, die Art, wie ich es tun, und dann versuchen, Ihre Frage zu beantworten.
filesUpload.addEventListener("change", function () {traverseFiles(this.files);}, false);
dropArea.addEventListener("drop", function (evt) {traverseFiles(evt.dataTransfer.files);}, false);
traverseFiles
, die Sie oben sehen, ist eine Funktion, die bekommt einFileList
(ein array vonFile
s), die einen Teil der Datei-API. Diese Funktion ruft dann eine FunktionuploadFile
für jedenFile
.uploadFile
sendet dieFile
asynchron über ajax (XMLHttpRequest.send(file)
).Nun um deine Frage zu beantworten wie binden Sie die gelöschten Dateien in einem input-Feld: können Sie nicht, tun Sie es einfach den anderen Weg. Sie erstellen eine API oder ein wrapper für Dateien hochladen und dann, wenn der Benutzer Dateien, rufen Sie diese wrapper-Funktion. Wenn der Benutzer klickt auf den <input> - Feld, Sie wieder Aufruf dieser wrapper - (, wie ich mit traverseFiles).
Sinn macht? Wenn nicht, sagen Sie mir, welchen Teil und ich Bearbeiten diese Antwort /ausbauen.
onchange und Ereignisse ondrop shuld binden eine Funktion mit der variable, um die Datei-Liste.
Lesen Sie Diese
Könnten Sie "HTML5-Datei-Uploader", die vorgibt, das zu tun, was Sie brauchen, sowie die anmutig degradieren für ältere Browser:
https://github.com/gre/HTML5-File-Uploader/wiki
Ich noch nicht selber ausprobiert.
Alternativ könnten Sie werfen Sie einen Blick auf diese Seite, die versorgt alle der code, den Sie brauchen, es selbst zu tun:
http://robertnyman.com/2010/12/16/utilizing-the-html5-file-api-to-choose-upload-preview-and-see-progress-for-multiple-files/