2014-08-31 74 views
5

我想按照this simple tutorial在燒瓶中提交文件。要提交我用下面的HTML表單文件:爲什麼`request.files`是空的?

print 'request.method', request.method 
print 'request.args', request.args 
print 'request.form', request.form 
print 'request.files', request.files 

結果我得到如下:

<form action="" method="post" "enctype=multipart/form-data"> 
<table border="0" summary=""><tbody> 
    <tr> 
     <th> 
      <label for="image_file">Your image:</label> 
     </th> 
     <td> 
      <input type="file" id="image_file" name="image_file"></input> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     </td> 
     <td> 
      <input type="submit" value="Submit" /> 
      <a href="/test_func">Cancel</a> 
     </td> 
    </tr> 
</tbody></table> 
</form> 

表單提交我檢查request變量通過以下方式內容之後

request.method POST 
request.args ImmutableMultiDict([]) 
request.form ImmutableMultiDict([('image_file', u'badge.gif')]) 
request.files ImmutableMultiDict([]) 

我不明白什麼request.files是空的。根據上面引用的教程,我確實需要使用file = request.files['file']來獲取文件對象(以保存它)。

我在做什麼錯?

+2

如果這真的是你使用的HTML,雙引號應該在'enctype ='之後。現在整個事情都是一個字符串,所以它可能不會發送文件,只是來自該字段的名稱。 – davidism 2014-08-31 07:08:05

回答

8

您的表單標籤被錯誤引用。本教程將告訴您使用方法:

<form action="" method=post enctype=multipart/form-data> 

(不包括引號),但更好的HTML是使用:

<form action="" method="post" enctype="multipart/form-data"> 

注意引號是圍繞只是值的屬性

如果沒有正確設置enctype,表單將使用不同的編碼,並且瀏覽器不會正確上傳文件數據,Flask也不會嘗試解析文件數據。