2012年5月2日 星期三

[Flask] multiple file input 上傳多檔案

這個害我傷腦筋好久,Flask處裡form的post,透過Werkzeug處理,如果是單一name,用request.values()(串列list)或request.form(dict),就可以抓到。如過是多重name,如:
<input name="animal" type="checkbox" value="lion" />
<input name="animal" type="checkbox" value="tiger" />
就要用request.form.getlist('animal')取的list。

檔案上傳:
<input name="icon[]" type="file" />
就要用request.files,是一個werkzeug自定的ImmutableMultiDict。 如果是同一個name的多檔案(input array)
<input name="image[]" type="file" />
<input name="image[]" type="file" />
request.files裡有值,但是用for j in request.files:同一個input name只能抓第一個出來,有人說Flask-WTF的FileField可以解決(沒試過)。後來去看了Werkzeug的原始碼:
class MultiDict
...
def iteritems
...
學他用
for key, values in dict.iteritems(request.files):
     for value in values:
         print key, value
就可以了。

沒有留言: