2014-08-31 14 views
5

मैं फ्लास्क में फ़ाइल सबमिशन के लिए this simple tutorial का पालन करने का प्रयास कर रहा हूं।क्यों '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 चर की सामग्री की जांच के बाद: मैं निम्न HTML फार्म का उपयोग फ़ाइलों को सबमिट करने के

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

उत्तर

8

आपके पास अपना फॉर्म टैग गलत तरीके से उद्धृत किया गया है। ट्यूटोरियल आप का उपयोग करने के लिए बताता है:

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

(कोट के बिना) लेकिन बेहतर गठन HTML का उपयोग करने होगा:

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

ध्यान दें कि उद्धरण के आसपास रहे हैं सिर्फ मूल्यों विशेषताओं की

enctype सही तरीके से सेट किए बिना, फ़ॉर्म एक अलग एन्कोडिंग का उपयोग करता है और आपका ब्राउज़र फ़ाइल डेटा को सही तरीके से अपलोड नहीं करेगा, न ही फ़ाइल डेटा को पार्स करने का प्रयास करेगा।

संबंधित मुद्दे