Ich versuche seit Stunden, eine einfache Textdatei hochzuladen, aber ich kann es immer noch nicht zum Laufen bringen.
Ich erhalte immer wieder ungültige Formulare, die besagen, dass mir “file_source” fehlt.
Warum wird “file_source” nicht gepostet?
Ich habe es auch dazu gebracht, tatsächlich “file_source” zu senden, aber es sagt immer noch, dass es fehlt. Welche Art von Element sollte einem Django FileFiled gegeben werden?
Django-Formular:
class FileUploadForm(forms.Form):
file_source = forms.FileField()
def upload_view(request):
if request.is_ajax():
form = FileUploadForm(request.POST)
if form.is_valid():
print 'valid form'
else:
print 'invalid form'
print form.errors
return HttpResponseRedirect('/ingest/')
Sie müssen FormData oder Flash oder Iframes verwenden, um Dateien zu senden. Ich empfehle die Verwendung von FormData, siehe diese Antwort stackoverflow.com/questions/20715606/post-data-using-ajax-post/…
– Victor Castillo Torres
29. Dezember 13 um 7:02 Uhr
mögliches Duplikat von Wie kann ich Dateien asynchron mit jQuery hochladen?
– Nikolaus Cortot
29. Dezember 2013 um 08:16 Uhr
@Nicolas Es ist ähnlich, aber nicht dasselbe. Ich brauchte einen Weg, um Django dazu zu bringen, den Ajax-Post richtig zu interpretieren.
– armm
30. Dezember 13 um 23:03 Uhr
armm
Hier ist, was ich geändert habe, damit es funktioniert.
Ich habe FormData verwendet, um Daten aus dem Formular zu verpacken
Beachten Sie die Parameter des Formulars in der Django-Ansicht. Ich habe vorher keine “Dateien” angegeben und das hat den Fehler “Dateifeld erforderlich” verursacht.
Javascript:
function upload(event) {
event.preventDefault();
var data = new FormData($('form').get(0));
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: data,
cache: false,
processData: false,
contentType: false,
success: function(data) {
alert('success');
}
});
return false;
}
$(function() {
$('form').submit(upload);
});
Django-Ansicht:
def upload_view(request):
if request.method == 'POST':
form = FileUploadForm(data=request.POST, files=request.FILES)
if form.is_valid():
print 'valid form'
else:
print 'invalid form'
print form.errors
return HttpResponseRedirect('/ingest/')
könnten Sie Ihr Formular präsentieren
– Andilabs
26. März 15 um 12:02 Uhr
Was ist das FileUploadForm, das Sie verwenden?
– wer auch immer
6. Dezember 15 um 15:45 Uhr
das Formular ist in meiner ursprünglichen Frage
– armm
15. Januar 16 um 19:45 Uhr
Ich habe Ihren Code verwendet und er erhält 403, weil das CSRF-Token fehlt. Irgendeine Idee, wie man es löst?
– Filippo Costa
3. Juli 17 um 15:59 Uhr
Sie können @csrf_exempt verwenden
– Kelvin Barsana
2. November 17 um 8:40 Uhr
Abdallah Okasha
So können wir JSON-Daten zusätzlich zu Dateien mit Ajax an Django senden.
Beispiel:
JS mit Formulardaten
var formData = new FormData();
formData.append('file1', myFile);
const data_ = JSON.stringify(data)
formData.append('data', data_);
doPost(url, formData)
.then(result => {
})
Sie können FormData verwenden, meine Antwort anzeigen
– armm
30. Dezember 13 um 23:01 Uhr
Der Link, den ich angegeben habe, verwendet auch FormData, dies funktioniert jedoch nicht mit älteren Browsern (caniuse.com/#search=formdata), weshalb ich die anderen Links gegeben habe.
Sie müssen FormData oder Flash oder Iframes verwenden, um Dateien zu senden. Ich empfehle die Verwendung von FormData, siehe diese Antwort stackoverflow.com/questions/20715606/post-data-using-ajax-post/…
– Victor Castillo Torres
29. Dezember 13 um 7:02 Uhr
mögliches Duplikat von Wie kann ich Dateien asynchron mit jQuery hochladen?
– Nikolaus Cortot
29. Dezember 2013 um 08:16 Uhr
@Nicolas Es ist ähnlich, aber nicht dasselbe. Ich brauchte einen Weg, um Django dazu zu bringen, den Ajax-Post richtig zu interpretieren.
– armm
30. Dezember 13 um 23:03 Uhr