Ich habe derzeit ein Django-Formset mit dynamischer Anzahl von Formularen. Jedes Formular hat ein Dateifeld.
Während dies funktioniert, muss ich mehrere Dateien gleichzeitig auswählen können. Ich kann das mit input type='file' multiple='multiple'
machen und ich kann Dateidaten mit FileReader
lesen. Aber wie kann ich diese Dateien an django formset anstelle von form-0-file
, form-1-file
etc übergeben?
Ich kann mir eine Möglichkeit vorstellen: Ersetzen Sie FileField
durch TextField
und übergeben Sie die codierte Datei base64
als Text, aber ich bin mir nicht sicher, ob es eine gute Lösung ist.
Die Verwendung von multiple='multiple'
steht nicht im Zusammenhang mit Formset oder Einzelform. Es wird nativ mit Django arbeiten. Wenn Sie also ein einzelnes Formular anstatt eines Formularsatzes verwenden möchten, setzen Sie einfach multiple
attribut und dann request.FILES, um alle hochgeladenen Dateien zu erhalten.
Sie sollten die Bilder als Dateien speichern, (Hier sind einige gute Antworten dazu) ,
Ich habe bereits versucht, Bilder auf diese Weise zu speichern, aber es gibt viele Probleme:
Jedes Mal, wenn Sie diese Seite aufrufen, wird das Bild erneut geladen, und die Personen möchten nicht jedes Mal das gleiche Bild laden.
Es wird viel Bandbreite benötigt.
Wenn Sie einen kostenlosen Webhosting-Dienst verwenden, verbringen Sie Ihre gesamte Bandbreite in ein paar Stunden oder wenn Sie 50 Bilder speichern, so dass Ihre Seite den ganzen Monat über leer ist, sogar die Dienste, die unbegrenztes Hosting und Bandbreite bieten, sorgen für eine monatliche Bandbreite.
Ich hatte kürzlich ein Problem, bei dem ich eine Lösung implementieren musste, bei der ein Benutzer ein Dokument hochladen, auf den Server streamen und den Stream auf einen Server schreiben kann, ohne den Server zu speichern.
Die Art, wie ich es implementiert habe, ist wie folgt:
Ich wollte die Datei über AJAX hochladen, damit ich den Fortschritt des Uploads anzeigen kann.
Dies ist meine Lösung (Bitte beachten Sie, dass dies nur für jeweils eine Datei gilt - aber es könnte ein Ausgangspunkt sein.)
JavaScript:
Deklarieren Sie zuerst ein Objekt für die FormData - Dies wird verwendet, um zusätzliche Informationen zusammen mit den Dateien zu senden:
%Vor%Zweitens fügen Sie alle Daten an, die Sie an den Server senden möchten:
%Vor%Erstellen Sie jetzt eine neue Instanz von XMLHttpRequest:
%Vor%Dies ist der Rest des Codes, der alles funktioniert hat:
%Vor%PHP
%Vor%Sie haben jetzt die Binärdaten auf dem Server.
Sie sollten in der Lage sein, dies für mehrere Dateien zu erledigen, indem Sie das file.files[0]
in JavaScript durchlaufen.
Ich hoffe, Sie können das auf Ihr Problem anwenden.
Tags und Links django javascript html