djangoは一度に複数のファイルをアップロードし、一括アップロードする

8700 ワード

djangoでファイルを書いてアップロードするときにrequest.FILES['myfiles']で取得したファイルは常に1つしかありませんが、HTMLページではHTML 5のファイルコントロールで複数のファイルが選択されているのにCHROMEブラウザを使っており、一度に複数のファイルを選択してアップロードすることができます.Pydevでdebugモードをオンにし、requestオブジェクトを表示すると、アップロードされた複数のファイルが確かにrequestオブジェクトにあることがわかりますが、なぜrequestを使用するのか.FILES['myfiles']は1つしか得られませんか?
フロントエンドhtml 5アップロードコントロール、jquery file uploadを使いました
 <input type="file" name="myfiles" multiple="">

複数のファイルを選択した後、リクエストを送信し、pydev debugモードをオンにしてrequestの内容を表示します.
ここでrequest.FILESの内容は以下の通りです.
MultiValueDict: <MultiValueDict: {u'myfiles': [<InMemoryUploadedFile: 300x600.png (image/png)>, <InMemoryUploadedFile: todo.txt (text/plain)>]}>

明らかに、アップロードされたファイルは確かにその中にありますが、requestを使用します.FILES['myfiles']が得られたのは確かに最後だ.2つのファイルが得られません.トレースコード発見、request.FILESのタイプはMultiValueDictで、この辞書類は特殊に定義されており、listを取得するにはgetlistメソッドを呼び出す必要がある場合は、ここを見て、おおらかで、以下はアップロードされた複数のファイルと処理の論理を得る
files = request.FILES.getlist('myfiles')
for f in files:      
     destination = open('d:/temp/' + f.name,'wb+')
     for chunk in f.chunks(): 
          destination.write(chunk)
     destination.close()

実はとても簡単で、細心の注意を払わないで、またdjangoのデフォルトは1つのファイルのアップロードだけを処理して、一度に複数のファイルのアップロードを一括処理するにはこのような方法を採用しなければなりません.
この文書は次のとおりです.http://www.yihaomen.com/、原文住所:http://www.yihaomen.com/article/python/462.htmああ、原作者に感謝します.