2012-09-02 90 views
1

所以我有一個設置頁面,用戶可以上傳一張照片到網站上,並附上一張表單發送的請求,但是現在我無法檢測到用戶是否上傳了照片,因爲表單中還有其他部分,底部有一個提交按鈕。現在,我正在使用if 'file_input' in request.POST:,但它始終返回true,即使用戶沒有上傳照片。如何檢測用戶是否真的上傳了照片。的HTML是:金字塔檢測照片上傳

<form class="group-photo" action="/${groupName}/settings" method="post" style="vertical-align:text-bottom" enctype="multipart/form-data"> 
      <span style="font-size:17px;font-weight:bold;">Group Photo</span> 
      <img style="border-radius:15px;margin-top:5px;margin-bottom:5px;" src="/static/group/${photo_id}_120.${photo_ext}"> 
      <br> 
      <div class="fileinputs"> 
       <input class="file" type="file" name="file_input" value="Choose image"> 

       <div class="fakefile" style="margin-left:40px;"> 
        <input type="button" class="btn btn-primary" value="Choose image"/> 
       </div> 
      </div> 
      <br/> 
      <span style="font-size:17px;font-weight:bold;">Description</span> 
      <textarea class="groupbio" name="groupbio">${bio}</textarea> 
      <br> 
      <br> 
      <p><input class="btn btn-success" type="submit" name="submitted" value="Save Changes"></p> 
     </form> 

回答

6

瀏覽器包括表格中的所有文件輸入要素,即使空的,所以'file_input' in request.POST'測試將永遠是真實的,但如果是空的,這是一個空的Unicode字符串(u'')。

一個適當的文件上傳有一個文件名,測試爲:

if 'file_input' in request.POST and hasattr(request.POST['file_input'], 'filename'): 

文件上傳cgi.FieldStorage實例和filename測試是什麼cgi module documentation建議:

如果一個字段代表上傳的文件,通過value屬性或getvalue()方法訪問值作爲字符串讀取內存中的整個文件。這可能不是你想要的。您可以通過測試文件名屬性或文件屬性來測試上傳的文件。

+0

工作完美:) – Wiz