0

J'utilise la bibliothèque de l'affiche de python pour tenter de télécharger un formulaire contenant notamment une image à un servlet. Localement, il fonctionne correctement, mais lorsque je le déploie sur un moteur d'application, il ne le reconnaît pas en tant que contenu en plusieurs parties.isMultipartContent = false tout en utilisant la bibliothèque affiche python

ServletFileUpload.isMultipartContent (demande) retourne false

Voici comment j'utilise la bibliothèque affiche:

register_openers() 
datagen, headers = multipart_encode({"image": open(filename)}) 
request = urllib2.Request(url, datagen, headers) 

Les contrôles de servlet pour vous assurer qu'il est multipart, mais il échoue cette vérification. Que puis-je faire pour poursuivre le débogage?

Merci, jean

mise à jour ******* ********* imprimant la trace de la pile ... voici ce que je reçois. Il se plaint l'en-tête de type de contenu isnull

org.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException: la demande ne contient pas de multipart/form-data ou flux multipart/mixtes, en-tête de type de contenu est nul org. apache.commons.fileupload.FileUploadBase $ FileItemIteratorImpl. (FileUploadBase.java:885) à org.apache.commons.fileupload.FileUploadBase.getItemIterator (FileUploadBase.java:331) à org.apache.commons.fileupload.FileUploadBase.parseRequest (FileUploadBase.java:349) à org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest (ServletFileUpload.java:126)

Répondre

0

Si vous êtes sous Windows (ou un Pedan t ;-), open(filename) est la mauvaise façon d'ouvrir un fichier binaire et pourrait gâcher les choses - utilisez open(filename, 'rb'). En dehors de cela, en supposant bien sûr que vous continuez avec un urllib2.urlopen(request) que vous avez omis, que vos import sont corrects, et que filename et url sont correctement définis précédemment, alors votre code semble légitime.

+0

Merci pour le conseil. Oui, j'ai suivi avec urllib2.urlopen (demande) et tout le reste est configuré correctement et fonctionne comme prévu lorsque je lance mon application appengine localement. Quand il est déployé, il touche le servlet, mais la servlet rejette la requête car j'ai vérifié que c'est multipart. – jeanh

+0

@jeanh, je me demande si ce chèque est correct - au servlet, pouvez-vous « vider » le flux d'octets exact, il devient (dans un fichier, connectez-vous, peu importe) et par les pairs à lui pour voir comment il diffère de ce qui est envoyé ? –

+0

également juste vérifié, en cours d'exécution localement, request.getContentType semble très bien. Une fois déployé sur le moteur de l'application, il est nul. – jeanh