2012-12-02 25 views
6

Khi tôi trình Django một nhiều file upload hình thứcDjango nhiều file trong một đầu vào không thể được đọc bởi máy chủ

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

tôi nhận được một kết quả hợp lý trong request.FILES:

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

Nhưng sau đó sự nhầm lẫn của tôi bắt đầu. Tôi nghĩ request.FILES['files'] sẽ chứa một vài tập tin (dường như là một danh sách), nhưng nó chỉ hiển thị

0203.jpg 

Không InMemoryUploadedFile phần và quan trọng hơn: chỉ có các tập tin cuối cùng!

Lặp qua request.FILES với .iteritems() cũng chỉ vượt qua một tệp đó, request.FILES['files'] rõ ràng là không thể đọc được; đoạn mã dưới đây thực sự đóng băng lên bảng điều khiển và làm cho nó phát ra tiếng bíp vô tận:

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

Vậy ... Điều này có bình thường không? Tôi đang làm gì sai?

Như tôi bắt đầu nghĩ rằng đây có thể là một lỗi: Tôi đang sử dụng Django 1.4.2 với Python 2.7 trên Windows 7.

Trả lời

9

Hóa ra câu trả lời là trên Stack Overflow sau khi tất cả, trên vấn đề hơi khác (phía khách hàng, ít nhất) ở đây: multiple files upload using same input name in django

Chỉ ra rằng request.FILES['files'] sai và phải là request.FILES.getlist('file').

Tại sao đây là trường hợp hoàn toàn bí ẩn đối với tôi. Nếu bất cứ ai có thể trả lời với một lời giải thích, tôi sẽ sẵn sàng chuyển câu trả lời được chấp nhận.

+0

Xem tại đây: https://stackoverflow.com/a/46409022/5512755 Để có giải thích mở rộng hơn về lý do. – Dunatotatos

Các vấn đề liên quan