Come caricare un file e i dati JSON in Postman?


134

Sto usando Spring MVC e questo è il mio metodo:

/**
* 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;
        }
    }
}


Devo passare l'id di sessione in postman e anche il file. Come lo posso fare?

Risposte:


221

In postino, imposta il tipo di metodo su POST .

Quindi selezionare Body -> form-data -> Immettere il nome del parametro ( file in base al codice)

e sul lato destro accanto alla colonna del valore, ci sarà il menu a discesa "testo, file" , selezionare File . scegli il tuo file immagine e pubblicalo.

Per il resto dei parametri basati su "testo" , puoi pubblicarlo come fai normalmente con Postman. Basta inserire il nome del parametro e selezionare "testo" dal menu a discesa sul lato destro e inserire qualsiasi valore per esso, premere il pulsante di invio. Il metodo del controller dovrebbe essere chiamato.


4
Perché POST? Che dire PUT?
Verde,

4
Cosa intendi con "Non funziona"? Perché non ci mostri il codice per eseguire facilmente il debug del problema?
Sumit Badaya,

2
Ricevo la parte di testo come Stringsempre. Perché non si associa al mio DTO? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) In questo caso non sono in grado di inviare il requisito dal postino
Arun Gowda,

@ArunGowda Prova a pubblicare la tua query come nuova domanda. Poiché è diverso dal poster della domanda qui e la risposta fornita è rilevante per la domanda pubblicata qui dall'OP.
Sumit Badaya,

1
Ho trovato la mia soluzione. Non verrà mappato RequestDtoautomaticamente. L'ho preso come una stringa, analizzato Jsone mappato in modo RequestDtoesplicito.
Arun Gowda,

111

La guida visiva mancante

Devi prima trovare il menu a discesa quasi invisibile grigio chiaro su bianco per il Filequale è la chiave magica che sblocca il Choose Filespulsante.

Dopo aver scelto POST, quindi scegliere Body->form-data, quindi trovare il menu a discesa File e quindi scegliere 'File', solo allora apparirà magicamente il pulsante 'Scegli file':

Impostazione file POST Postino - Menu a discesa (Testo, File) evidenziato


1
hai ragione in quanto l'interfaccia utente per questo è invisibile ai non iniziati. Grazie per la versione visiva!
Vijay,

cosa succede se ho un payload del corpo XML e l'allegato?
tuxErrante,

La risposta di Gce sembra dire che puoi farlo abbastanza facilmente? Non ne sono sicuro . Potrebbe essere necessario imparare a combinare l'allegato e l'XML in un unico documento, imparando a conoscere il formato mime in più parti. Il che non è troppo complicato, puoi creare un corpo mime multipart a mano.
Chris F Carroll,

Due anni dopo, l'interfaccia utente non è stata migliorata.
Sabuncu,

47

Forse potresti farlo in questo modo:

postman_file_upload_with_json


8
Quali 6 intestazioni hai impostato lì?
Verde,

1
Questa soluzione funziona per me. Non ha superato nessuna testata e funziona bene. Grazie. Passare JSON è stata la parte difficile per me. :)
Gaurav Sharma,

Ah, intelligente - ha cambiato il mio endpoint per farlo :) Un po 'brutto ma super conveniente
Chris Koston,

Puoi spiegare di cosa stai parlando? @ChrisKoston
tlalco,

17

Come questo :

inserisci qui la descrizione dell'immagine

Corpo -> form-data -> seleziona file

Devi scrivere "file" invece di "nome"

Inoltre è possibile inviare dati JSON da Body -> campo non elaborato. (Basta incollare la stringa JSON)


3
in realtà ho bisogno di passare alcuni valori e file in postino per un servizio è possibile
Harikrishnan KN

1
Intestazioni? quali intestazioni impostare?
Verde,

11
La domanda richiede anche il caricamento di dati json, che non è trattato qui in questa risposta.
Rohit,

Il modo corretto per fare questo: stackoverflow.com/questions/21329426/...
dassum

10
  1. Non dare intestazioni.
  2. Inserisci i tuoi dati json in un file .json.
  3. Seleziona entrambi i file uno è il tuo file .txt e l'altro è il file .json per le tue chiavi param della richiesta.

Questa è una buona risposta .. Può essere utilizzata anche per casi d'uso in cui è necessario caricare più file insieme a un payload json in un payload in più parti ..
Kiran,

Questa è la risposta più corretta se si desidera inviare un file e i dati JSON. Gli esempi che mostrano la selezione di un file e quindi il passaggio dei dati JSON come singolo valore di stringa JSON o la divisione dei valori non funzionano (probabilmente a seconda del punto finale ma non posso verificarlo). È anche menzionato qui: github.com/postmanlabs/postman-app-support/issues/3331
Anto

8

Se è necessario caricare il file in più parti utilizzando i dati del modulo e inviare i dati json (oggetto Dto) nella stessa richiesta POST

Ottieni il tuo oggetto JSON come stringa nel controller e rendilo deserializzato aggiungendo questa riga

ContactDto contactDto  = new ObjectMapper().readValue(yourJSONString, ContactDto.class);

1
Puoi dirmi quali sono le due intestazioni utilizzate?
Abhisek Roy,

Tipo di contenuto: application / json Autorizzazione: bearer (yourTokenString)
Ajay k

Sì, ha funzionato. Grazie. Ho usato il codice seguente e ho lavorato: @PostMapping (value = Constant.API_INITIAL + "/ uploadFile") public UploadFileResponse uploadFile (@RequestParam ("file") File MultipartFile, String jsonFileVo) {FileUploadVo fileUploadVo = null; provare {fileUploadVo = new ObjectMapper (). readValue (jsonFileVo, FileUploadVo.class); } catch (Exception e) {e.printStackTrace (); }
Anand_5050 il

puoi impostare Content-Type per contactDtoString su application / json, puoi farlo per ogni tasto
Hritcu Andrei

7

Tipo postman multipart-data-content-type

Selezionare [Tipo di contenuto] da [MOSTRA COLONNE], quindi impostare il tipo di contenuto di "application / json" sul parametro del testo json.



6

Se qualcuno vuole inviare dati json in formato form-data, devi solo dichiarare le variabili in questo modo

Postino:

Come vedi, il parametro description sarà nel formato json di base, risultato di questo:

{ description: { spanish: 'hola', english: 'hello' } }

2

Avevo bisogno di passare entrambi: un file e un numero intero. L'ho fatto in questo modo:

  1. necessario passare un file da caricare: lo ha fatto secondo la risposta di Sumit.

    Tipo di richiesta: POST

    Corpo -> modulo-dati

    sotto l'intestazione KEY , ho inserito il nome della variabile ('file' nel mio codice di backend).

    nel backend:

    file = request.files['file']

    Accanto a "file", c'è una casella a discesa che ti permette di scegliere tra "File" o "Testo". Scegli "File" e sotto l'intestazione VALUE , appare "Seleziona file". Cliccato su questo che ha aperto una finestra per selezionare il file.

2. necessario per passare un numero intero:

è andato a:

Parametri

immesso il nome della variabile (ad es. id) in KEY e il suo valore (ad es. 1) in VALUE

nel backend:

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

Lavorato!


2

Utilizzare sotto il codice nel lato poggiagambe:

@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();
        }

inserisci qui la descrizione dell'immagine


2

Per ogni chiave di dati del modulo che puoi impostare Content-Type, c'è un pulsante postino sulla destra per aggiungere la colonna Content-Type e non devi analizzare un json da una stringa all'interno del tuo Controller.


1

Se vuoi fare una PUTrichiesta, fai tutto come POSTrichiesta ma aggiungi _method=> PUTai tuoi form-dataparametri.



0

Se si utilizzano i cookie per mantenere la sessione, è possibile utilizzare l' interceptor per condividere i cookie dal browser al postino.

Inoltre per caricare un file è possibile utilizzare la scheda modulo-dati nella scheda body sul postino, in cui è possibile fornire dati in formato valore-chiave e per ogni chiave è possibile selezionare il tipo di valore testo / file. quando si seleziona l'opzione del tipo di file è apparso per caricare il file.


2
Per quello che stai ottenendo 500. puoi per favore condividere qualche dettaglio in più
Sandesh Jain,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.