web-dev-qa-db-fra.com

Envoi de contenu multipart/mixte avec extension Postman Chrome

Je ne parviens pas à créer une demande multipartite/mixte POST avec l'extension Postman Chrome

Voici ma demande de curl qui fonctionne Nice

curl -H "Content-Type: multipart/mixed" 
-F "metadata=@simple_json.json; type=application/json "
-F "[email protected]; type=image/jpg" -X POST http://my/api/item -i -v

partie intéressante de la réponse

Longueur du contenu: 41557

Attendre: 100-continue

Type de contenu: multipart/mixed; frontière = ---------------------------- 8aaca457e117

  • trucs supplémentaires pas bien transfer.c: 1037: 0 0
  • HTTP 1.1 ou version ultérieure avec connexion persistante, traitement en pipeline pris en charge

Et quand j'utilise Postman enter image description here

Je reçois une telle réponse

{"message":"Could not parse multipart servlet request;
 nested exception is org.Apache.commons.fileupload.FileUploadException: 
 the request was rejected because no multipart boundary was     
 found","type":"error","status":500,"requestId":"1861eloo6fpio"}

Ça y est - je souhaite me débarrasser de cette erreur ... Si vous avez besoin de plus d'informations, veuillez demander :)

47
pbaranski

Je faisais face à ce problème aussi. Réponse courte: supprimez l'en-tête Content-Type de votre demande Postman.

La longue histoire est que le Content-Type pour une requête en plusieurs parties devrait être assez spécial - il devrait ressembler à ceci:

multipart/form-data; boundary=----WebKitFormBoundaryzeZR8KqAYJyI2jPL

Le problème est que la limite est importante et qu'elle doit correspondre exactement à la limite utilisée pour séparer les fichiers téléchargés. La solution est simple: ne spécifiez pas un Content-Type! Lorsque vous téléchargez des fichiers, Postman ajoute automatiquement le type de contenu ci-dessus, sauf que les limites sont remplies avec tout ce que Postman ou Chrome utilise pour séparer le contenu en plusieurs parties.

Vous pouvez vérifier ce comportement en utilisant les outils de développement Chrome (dans Postman) pour examiner l'en-tête Content-Type ajouté, en plus des en-têtes Content-Disposition des données en plusieurs parties, qui sont également difficiles à construire manuellement (et impossible dans Postman).

Note : Ma réponse est une solution pour ceux qui ont besoin d'une réponse multipart/form-data. Le PO recherchait une solution multipart/mixed. Ma réponse ne suffira pas dans ce scénario. Cela étant dit, il semble que beaucoup de gens veulent juste la solution multipart/form-data, alors je vais laisser ma réponse ici.

86
Kirk Woll

Laissé ce commentaire sur: https://github.com/postmanlabs/postman-app-support/issues/1104

Ninja update: Vous ne savez pas si cela aidera quelqu'un d'autre, mais il existe une solution de contournement pour un scénario spécifique dans lequel plusieurs types de fichiers/types de contenu sont en cours de chargement dans une même demande multipartie POST.

  1. Définissez l'en-tête Content-Type sur multipart/mixed.
  2. Sélectionnez l'option form-data dans Body.
  3. Convertissez tous vos éléments en fichiers. Le contenu de la chaîne devrait devenir un fichier texte, etc.
  4. Ajoutez chaque fichier en sélectionnant file, en ajoutant un nom de clé.

Cette approche ne nécessite pas de spécifier manuellement chaque Content-Type ou Content-Disposition. Le truc ici était de sérialiser tout le contenu pertinent dans un type de fichier persistant. Vous pouvez ignorer l'étape "convertir le fichier en fichier" si c'est du texte :) J'espère que cela aidera quelqu'un!

0
Adam Gerard