2012-12-02 2 views
6

Kiedy złożyć do Django wielokrotnością plików przesłać formularzDjango wielu plików w jednym wejściu nie może być odczytany przez serwer

<input type="file" name="files" multiple /> 

uzyskać rozsądny wynik w request.FILES:

(MultiValueDict: {u'files': [(InMemoryUploadedFile: 0202.jpg (image/jpeg)), (InMemoryUploadedFile: 0203.jpg (image/jpeg))]}) 

ale potem moje zamieszanie się zaczyna. Myślałem request.FILES['files'] będzie zawierać kilka plików (pojawia się lista), ale pokazuje tylko

0203.jpg 

nr InMemoryUploadedFile część i co ważniejsze: tylko ostatni plik!

Zapętlanie się przez request.FILES z .iteritems() tylko przechodzi do tego samego pliku, request.FILES['files'] jest wyraźnie powtarzalny; Poniższy kod faktycznie zamarł konsolę i wykonane sygnał dźwiękowy końca:

for v in request.FILES['files']: 
    print v 
    print type(v) 

Więc ... Czy cokolwiek z tego to normalne? Co ja robię źle?

Jak Zaczynam myśleć, może to być błąd: Używam Django 1.4.2 z Pythona 2.7 na Windows 7.

Odpowiedz

9

Okazuje się, że odpowiedź była na przepełnienie stosu po wszystkim, na zasadzie nieco inny (przynajmniej po stronie klienta) problem tutaj: multiple files upload using same input name in django

Okazało się, że request.FILES['files'] było nieprawidłowe i powinno być request.FILES.getlist('file').

Dlaczego tak jest, jest dla mnie całkowitą tajemnicą. Jeśli ktokolwiek może odpowiedzieć z wyjaśnieniem, chętnie zmienię zaakceptowaną odpowiedź.

+0

Patrz tutaj: https://stackoverflow.com/a/46409022/5512755 Bardziej szczegółowe wyjaśnienie przyczyny. – Dunatotatos