2014-08-31 4 views
5

Ich versuche, this simple tutorial für Dateiübertragungen in Kolben zu folgen. So senden Sie Dateien, die ich das folgende HTML-Formular:Warum `request.files` ist leer?

<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> 

Nach der Formular-Vorlage Ich überprüfe den Inhalt der request Variable auf folgende Weise:

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

Als Folge ich folgende erhalten:

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

Was ich nicht verstehe ist, was request.files ist leer. Nach dem oben genannten Tutorial muss ich file = request.files['file'] verwenden, um das Dateiobjekt zu erhalten (um es zu speichern).

Was mache ich falsch?

+2

Wenn es sich wirklich um den von Ihnen verwendeten HTML-Code handelt, sollte das doppelte Anführungszeichen hinter 'enctype =' stehen. Im Moment ist die ganze Sache eine Zeichenkette, also schickt sie wahrscheinlich nicht die Datei, sondern nur den Namen aus dem Feld. – davidism

Antwort

8

Sie haben Ihr Formular-Tag falsch zitiert. Das Tutorial erzählt Sie verwenden:

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

(ohne Anführungszeichen), aber besser HTML nicht würde zu verwenden sein:

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

Beachten Sie, dass die Anführungszeichen sind um nur die Werte der Attribute .

Ohne korrekte Einstellung enctype verwendet das Formular eine andere Codierung, und Ihr Browser lädt die Dateidaten nicht korrekt hoch, noch wird Flask versuchen, die Dateidaten zu analysieren.