2010-08-25 6 views
0

HTML:Problèmes avec la réception de données de <form>

<form enctype="multipart/form-data" action="/convert_upl" method="post">   
     Name: <input type="text" name="file_name"> 
     File: <input type="file" name="subs_file"> 
     <input type="submit" value="Send"> 
</form> 

Python (Google App Engine):

if self.request.get('file_name'): 
        file_name = self.request.get('file_name') 

Mon problème est que je reçois pas de données d'entrée de texte nom_fichier. Je suis conscient que le problème est dû à son existence sous la forme enctype = "multipart/form-data" mais je ne sais pas comment le résoudre - je veux dire comment recevoir un fichier et la chaîne de l'entrée en un clic du bouton de soumission.

Merci d'avance.

+0

est-il prudent de supposer que vous utilisez du HTML correctement formaté? vous n'avez pas de < > autour de vos tags .... essayez aussi de passer une chaîne à travers votre formulaire sans le multipart/for-data enctype et voir si votre code de formulaire fonctionne en fait. – JiminyCricket

+0

Je suis désolé pour l'apparence des fragments de code bien que je ne trouve aucune aide pour le formater ici - sur stackoverflow. – user430744

+0

utiliser la 5ème icône avec les 1 et 0 – JiminyCricket

Répondre

0

Le code exemple uploading fonctionne bien pour moi. Avez-vous essayé d'utiliser ce code exactement? Cela fonctionne-t-il pour vous, ou quels problèmes voyez-vous?

Comme vous le verrez, cet exemple a une forme avec le même codage que vous utilisez:

 <form action="/sign" enctype="multipart/form-data" method="post"> 
     <div><label>Message:</label></div> 
     <div><textarea name="content" rows="3" cols="60"></textarea></div> 
     <div><label>Avatar:</label></div> 
     <div><input type="file" name="img"/></div> 
     <div><input type="submit" value="Sign Guestbook"></div> 
     </form> 

il est juste un peu plus prudent dans le code HTML à utiliser correctement label balises pour afficher les étiquettes sur le terrain, mais cela n'affecte que l'apparence du formulaire lorsqu'il est rendu dans le navigateur.

Le code Python est similaire à ce que vous montrez (pour le petit susbset que vous faites show):

def post(self): 
    greeting = Greeting() 
    if users.get_current_user(): 
     greeting.author = users.get_current_user() 
    greeting.content = self.request.get("content") 
    avatar = self.request.get("img") 
    greeting.avatar = db.Blob(avatar) 
    greeting.put() 
    self.redirect('/') 

et bien sûr l'URL /sign est dirigé vers la méthode de classe dont nous venons do_post montré. Donc, si ce code fonctionne et pas le vôtre, où est la différence? Pas dans la partie que vous nous avez montré, donc il doit être dans certaines parties ne pas montré ... pouvez-vous reproduire la partie sur cet exemple de code de Google fonctionne très bien?

+0

J'ai tellement honte ... A cause du désordre je modifiais la mauvaise méthode dont le corps et le nom étaient tout à fait similaires au bon ... Umm désolé et merci pour votre effort. – user430744

+0

@user, pas de honte - errer est humain, et puisque (croyez-le ou non) la plupart des programmeurs sont humains, nous nous trompons tous! -) repérer, admettre et réparer les erreurs que nous faisons inévitablement est la marque d'excellence ne peut pas être "ne jamais faire d'erreur en premier lieu" ;-). –

0

Vous utilisez la méthode POST pour envoyer les données, mais vous essayez de l'obtenir avec la méthode GET.

au lieu de

self.request.get('file_name') 

faire quelque chose comme

self.request.post('file_name') 
+0

N'a pas aidé. De plus, je reçois le fichier avec self.request.get sans problème. – user430744

+0

alors recevez-vous les données du fichier, ou le nom du fichier? – JiminyCricket

+0

'.get' est une méthode de l'objet de requête considéré comme un mappage de type dict; il n'a aucune relation avec la méthode HTTP utilisée, GET ou POST! –

Questions connexes