Comment télécharger un fichier et des données JSON dans Postman?

134

J'utilise Spring MVC et voici ma méthode:

/**
* Upload single file using Spring Controller.
*/
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<GenericResponseVO<? extends IServiceVO>> uploadFileHandler(
            @RequestParam("name") String name,
            @RequestParam("file") MultipartFile file,
            HttpServletRequest request,
            HttpServletResponse response) {

    if (!file.isEmpty()) {
        try {
            byte[] bytes = file.getBytes();

            // Creating the directory to store file
            String rootPath = System.getProperty("catalina.home");
            File dir = new File(rootPath + File.separator + "tmpFiles");
            if (!dir.exists()) {
                dir.mkdirs();
            }

            // Create the file on server
            File serverFile = new File(dir.getAbsolutePath() + File.separator + name);
            BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));
            stream.write(bytes);
            stream.close();

            System.out.println("Server File Location=" + serverFile.getAbsolutePath());

            return null;
        } catch (Exception e) {
            return null;
        }
    }
}


Je dois passer l'identifiant de session dans postman et également le fichier. Comment puis je faire ça?

Harikrishnan KN
la source

Réponses:

221

Dans postman, définissez le type de méthode sur POST .

Sélectionnez ensuite Body -> form-data -> Entrez votre nom de paramètre ( fichier selon votre code)

et sur le côté droit à côté de la colonne de valeur, il y aura une liste déroulante "texte, fichier" , sélectionnez Fichier . choisissez votre fichier image et postez-le.

Pour le reste des paramètres basés sur le "texte" , vous pouvez le publier comme vous le faites normalement avec Postman. Entrez simplement le nom du paramètre et sélectionnez "texte" dans le menu déroulant de droite et entrez n'importe quelle valeur, appuyez sur le bouton d'envoi. Votre méthode de contrôleur devrait être appelée.

Sumit Badaya
la source
4
Pourquoi POST? Et quoi PUT?
Vert
4
Qu'entendez-vous par «ne fonctionne pas»? Pourquoi ne montrez-vous pas votre code pour que nous puissions déboguer facilement le problème?
Sumit Badaya
2
Je reçois la partie texte comme Stringtoujours. Pourquoi ne correspond-il pas à mon DTO? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) Je ne suis pas en mesure d'envoyer la demande du facteur du tout dans ce cas
Arun Gowda
@ArunGowda Essayez de publier votre requête en tant que nouvelle question. Comme il est différent de l'affiche de la question ici et que la réponse donnée est pertinente pour la question publiée ici par OP.
Sumit Badaya le
1
J'ai trouvé ma solution. Il ne sera pas mappé RequestDtoautomatiquement. Je l'ai pris comme une chaîne, analysé le Jsonet mappé RequestDtoexplicitement.
Arun Gowda
111

Le guide visuel manquant

Vous devez d' abord trouver la liste déroulante presque invisible gris pâle sur blanc pour Filelaquelle se trouve la clé magique qui déverrouille le Choose Filesbouton.

Après avoir choisi POST, puis choisi Body->form-data, puis recherchez la liste déroulante Fichier, puis choisissez `` Fichier '', alors seulement le bouton `` Choisir les fichiers '' apparaîtra comme par magie:

Configuration du fichier Postman POST - liste déroulante (Texte, Fichier) en surbrillance

Chris F Carroll
la source
1
vous avez raison en ce que l'interface utilisateur pour cela est invisible pour les non-initiés. Merci pour la version visuelle!
Vijay
Et si j'ai une charge utile XML et la pièce jointe?
tuxErrante
La réponse de gce semble dire que vous pouvez le faire assez facilement? Je ne suis pas sûr . Vous devrez peut-être apprendre à combiner la pièce jointe et le XML en un seul document en apprenant le format mime en plusieurs parties. Ce qui n'est pas trop compliqué, vous pouvez créer un corps de mime en plusieurs parties à la main.
Chris F Carroll
Deux ans plus tard, l'interface utilisateur n'a pas été améliorée.
Sabuncu
47

Peut-être que vous pourriez le faire de cette façon:

postman_file_upload_with_json

gce
la source
8
Quels 6 en-têtes avez-vous mis là?
Vert
1
Cette solution fonctionne pour moi. Je n'ai passé aucun en-tête et cela fonctionne bien. Merci. Passer JSON a été la partie délicate pour moi. :)
Gaurav Sharma
Ha, intelligent - a changé mon point de terminaison pour faire ça :) Un peu moche mais super pratique
Chris Koston
Pouvez-vous expliquer de quoi vous parlez? @ChrisKoston
tlalco
17

Comme ça :

entrez la description de l'image ici

Corps -> form-data -> sélectionner le fichier

Vous devez écrire "fichier" au lieu de "nom"

Vous pouvez également envoyer des données JSON à partir de Body -> champ brut. (Collez simplement la chaîne JSON)

Burakozgul
la source
3
en fait, je dois transmettre certaines valeurs et déposer dans le facteur pour un service est-ce possible
Harikrishnan KN
1
En-têtes? quels en-têtes définir?
Vert
11
La question demande également de télécharger des données json, ce qui n'est pas couvert ici dans cette réponse.
Rohit
La bonne façon de faire cela: stackoverflow.com/questions/21329426/…
dassum
10
  1. Ne donnez aucun en-tête.
  2. Placez vos données json dans un fichier .json.
  3. Sélectionnez vos deux fichiers, l'un est votre fichier .txt et l'autre est le fichier .json pour vos clés de paramètre de demande.
Rohit Thakur
la source
C'est une bonne réponse. Cela peut également être utilisé pour les cas d'utilisation où plusieurs fichiers doivent être téléchargés avec une charge utile json dans une charge utile en plusieurs parties ..
Kiran
C'est la réponse la plus correcte si vous souhaitez envoyer un fichier ainsi que des données JSON. Les exemples montrant la sélection d'un fichier, puis les données JSON transmises en tant que valeur de chaîne JSON unique ou la division des valeurs ne fonctionnent pas (peut-être en fonction du point final, mais je ne peux pas le vérifier). Il est également mentionné ici: github.com/postmanlabs/postman-app-support/issues/3331
Anto
8

Si vous avez besoin de télécharger un fichier en plusieurs parties à l' aide de données de formulaire et d'envoyer des données json (objet Dto) dans la même demande POST

Obtenez votre objet JSON en tant que chaîne dans Controller et faites-le désérialiser en ajoutant cette ligne

ContactDto contactDto  = new ObjectMapper().readValue(yourJSONString, ContactDto.class);
Ajay k
la source
1
Pouvez-vous me dire quels sont les deux en-têtes utilisés?
Abhisek Roy
Content-Type: application / json Authorization: bearer (yourTokenString)
Ajay k
Oui, cela a fonctionné. Merci. J'ai utilisé le code ci-dessous et j'ai travaillé: @PostMapping (value = Constant.API_INITIAL + "/ uploadFile") public UploadFileResponse uploadFile (@RequestParam ("file") MultipartFile file, String jsonFileVo) {FileUploadVo fileUploadVo = null; essayez {fileUploadVo = new ObjectMapper (). readValue (jsonFileVo, FileUploadVo.class); } catch (Exception e) {e.printStackTrace (); }
Anand_5050
vous pouvez définir le Content-Type pour contactDtoString sur application / json, vous pouvez le faire pour chaque clé
Hritcu Andrei
7

Type de contenu de données de formulaire en plusieurs parties Postman

Sélectionnez [Content Type] dans [SHOW COLUMNS] puis définissez le type de contenu de "application / json" sur le paramètre de texte json.

otamega
la source
6

Si quelqu'un avait besoin:

body -> form-data

Ajouter le nom du champ en tant que tableau

entrez la description de l'image ici

Sebastiao Marcos
la source
6

Si quelqu'un veut envoyer des données json au format form-data, il suffit de déclarer les variables comme ceci

Facteur:

Comme vous le voyez, le paramètre de description sera au format json de base, résultat de cela:

{ description: { spanish: 'hola', english: 'hello' } }
Sébastien Ardila
la source
2

J'avais besoin de passer les deux: un fichier et un entier. Je l'ai fait de cette façon:

  1. nécessaire pour transmettre un fichier à télécharger: l'avez-vous fait selon la réponse de Sumit.

    Type de demande: POST

    Corps -> form-data

    sous la rubrique KEY , saisissez le nom de la variable ('file' dans mon code backend).

    dans le backend:

    file = request.files['file']

    À côté de «fichier», il y a une liste déroulante qui vous permet de choisir entre «Fichier» ou «Texte». Choisissez «Fichier» et sous le titre VALUE , «Sélectionner les fichiers» est apparu. Cliquez dessus qui a ouvert une fenêtre pour sélectionner le fichier.

2. nécessaire pour passer un entier:

est allé à:

Paramètres

entré le nom de la variable (ex: id) sous KEY et sa valeur (ex: 1) sous VALUE

dans le backend:

id = request.args.get('id')

Travaillé!

Vinci Mojamdar
la source
2

Utilisez le code ci-dessous dans le côté du repose-ressort:

@PostMapping(value = Constant.API_INITIAL + "/uploadFile")
    public UploadFileResponse uploadFile(@RequestParam("file") MultipartFile file,String jsonFileVo) {
        FileUploadVo fileUploadVo = null;
        try {
            fileUploadVo = new ObjectMapper().readValue(jsonFileVo, FileUploadVo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

entrez la description de l'image ici

Anand_5050
la source
2

Pour chaque clé de données de formulaire que vous pouvez définir Content-Type, il y a un bouton Postman sur la droite pour ajouter la colonne Content-Type, et vous n'avez pas à analyser un json à partir d'une chaîne à l'intérieur de votre Controller.

Hritcu Andrei
la source
1

Si vous voulez faire une PUTdemande, faites tout simplement comme une POSTdemande mais ajoutez _method=> PUTà vos form-dataparamètres.

Kubilay
la source
0

Si vous utilisez des cookies pour garder la session, vous pouvez utiliser l' intercepteur pour partager des cookies du navigateur au facteur.

Aussi pour télécharger un fichier, vous pouvez utiliser l'onglet de données de formulaire sous l'onglet corps du facteur, dans lequel vous pouvez fournir des données au format clé-valeur et pour chaque clé, vous pouvez sélectionner le type de texte / fichier de valeur. lorsque vous sélectionnez l'option de type de fichier est apparue pour télécharger le fichier.

Sandesh Jain
la source
2
Pour ce que vous obtenez 500. pouvez-vous s'il vous plaît partager quelques détails
Sandesh Jain
-3

entrez la description de l'image ici

contrôleur de repos [classe de service classe d'initialisation d' application pour la configuration en plusieurs parties [photo du facteur] 2 fig

smk
la source
regardez dans les photos que j'ai fournies vous pouvez obtenir des informations sur le contrôleur, le service, l'appinitizer, le facteur
smk
veuillez ne pas publier d'images de code comme solution. Veuillez copier votre code dans la réponse elle-même.
Das_Geek