Wie lade ich eine Datei und JSON-Daten in Postman hoch?


134

Ich verwende Spring MVC und dies ist meine Methode:

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


Ich muss die Sitzungs-ID im Postboten und auch die Datei übergeben. Wie kann ich das machen?

Antworten:


221

Setzen Sie im Postboten den Methodentyp auf POST .

Wählen Sie dann Body -> Formulardaten -> Geben Sie Ihren Parameternamen ein ( Datei entsprechend Ihrem Code)

und auf der rechten Seite neben Wertspalte, wird es Drop - Down „Text, Datei“ , wählen Sie Datei . Wähle deine Bilddatei und poste sie.

Für die restlichen "text" -basierten Parameter können Sie sie wie gewohnt mit Postboten veröffentlichen. Geben Sie einfach den Parameternamen ein und wählen Sie "Text" aus dem Dropdown-Menü auf der rechten Seite. Geben Sie einen beliebigen Wert dafür ein und klicken Sie auf "Senden". Ihre Controller-Methode sollte aufgerufen werden.


4
Warum POST? Was ist mit PUT?
Grün

4
Was meinst du mit "Funktioniert nicht"? Warum zeigen Sie Ihren Code nicht an, damit wir das Problem leicht beheben können?
Sumit Badaya

2
Ich bekomme den Textteil wie Stringimmer. Warum wird es nicht meinem DTO zugeordnet? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) Ich bin in diesem Fall überhaupt nicht in der Lage, die Anfrage vom Postboten zu senden
Arun Gowda

@ArunGowda Versuchen Sie, Ihre Anfrage als neue Frage zu veröffentlichen. Da es sich von dem hier gezeigten Fragenplakat unterscheidet und die gegebene Antwort für die von OP hier gestellte Frage relevant ist.
Sumit Badaya

1
Ich habe meine Lösung gefunden. Es wird nicht RequestDtoautomatisch zugeordnet. Ich nahm es als Zeichenfolge, analysierte es Jsonund ordnete es RequestDtoexplizit zu.
Arun Gowda

111

Der fehlende visuelle Leitfaden

Sie müssen zuerst das fast unsichtbare Dropdown-Menü Hellgrau auf Weiß finden, für Filedas sich der magische Schlüssel befindet, mit dem die Choose FilesSchaltfläche entsperrt wird .

Nachdem Sie wählen POST, dann wählen Body->form-data, dann den Datei - Drop - Down finden, und dann wählen Sie ‚Datei‘, erst dann wird die Schaltfläche ‚Dateien auswählen‘ magisch erscheinen:

Postman POST-Datei einrichten - Dropdown-Liste (Text, Datei) hervorgehoben


1
Sie haben insofern Recht, als die Benutzeroberfläche dafür für Nicht-Initiierte unsichtbar ist. Danke für die visuelle Version!
Vijay

Was ist, wenn ich eine XML-Body-Payload und den Anhang habe?
tuxErrante

Die Antwort von gce scheint zu sagen, dass Sie es leicht genug tun können? Ich bin mir nicht sicher . Möglicherweise müssen Sie lernen, wie Sie den Anhang und das XML in einem einzigen Dokument kombinieren, indem Sie sich mit dem mehrteiligen MIME-Format vertraut machen. Was nicht allzu kompliziert ist, Sie können einen mehrteiligen Pantomimenkörper von Hand erstellen.
Chris F Carroll

Zwei Jahre später wurde die Benutzeroberfläche nicht verbessert.
Sabuncu

47

Vielleicht könnten Sie es so machen:

postman_file_upload_with_json


8
Welche 6 Header haben Sie dort gesetzt?
Grün

1
Diese Lösung funktioniert bei mir. Hat keine Header übergeben und es funktioniert gut. Vielen Dank. JSON zu bestehen war der schwierige Teil für mich. :)
Gaurav Sharma

Ha, klug - habe meinen Endpunkt geändert, um das zu tun :) Ein bisschen hässlich, aber super praktisch
Chris Koston

Können Sie erklären, wovon Sie sprechen? @ ChrisKoston
tlalco

17

So was :

Geben Sie hier die Bildbeschreibung ein

Body -> Formulardaten -> Datei auswählen

Sie müssen "Datei" anstelle von "Name" schreiben

Sie können JSON-Daten auch aus dem Feld Body -> raw senden. (Fügen Sie einfach die JSON-Zeichenfolge ein.)


3
Eigentlich muss ich einige Werte übergeben und in Postman für einen Dienst Datei ist das möglich
Harikrishnan KN

1
Überschriften? Welche Header müssen gesetzt werden?
Grün

11
In der Frage wird auch nach dem Hochladen von JSON-Daten gefragt, die hier in dieser Antwort nicht behandelt werden.
Rohit

Der richtige Weg, dies zu tun: stackoverflow.com/questions/21329426/…
dassum

10
  1. Gib keine Überschriften.
  2. Fügen Sie Ihre JSON-Daten in eine JSON-Datei ein.
  3. Wählen Sie Ihre beiden Dateien aus. Eine ist Ihre TXT-Datei und eine JSON-Datei für Ihre Anforderungsparameterschlüssel.

Dies ist eine gute Antwort. Dies kann auch für Anwendungsfälle verwendet werden, in denen mehrere Dateien zusammen mit einer JSON-Nutzlast in einer mehrteiligen Nutzlast hochgeladen werden müssen.
Kiran

Dies ist die richtigste Antwort, wenn Sie eine Datei sowie JSON-Daten senden möchten. Beispiele, die zeigen, wie eine Datei ausgewählt und dann die JSON-Daten als einzelner JSON-Zeichenfolgenwert übergeben oder die Werte aufgeteilt werden, funktionieren nicht (möglicherweise abhängig vom Endpunkt, aber ich kann dies nicht überprüfen). Es wird auch hier erwähnt: github.com/postmanlabs/postman-app-support/issues/3331
Anto

8

Wenn Sie wie Hochladen Datei in mehrteiliger Formulardaten und senden mit json Daten (DTO - Objekt) in demselben POST anfordern

Holen Sie sich Ihr JSON-Objekt als String in Controller und lassen Sie es durch Hinzufügen dieser Zeile deserialisieren

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

1
Können Sie mir sagen, welche beiden Header verwendet werden?
Abhisek Roy

Inhaltstyp: application / json Autorisierung: Inhaber (yourTokenString)
Ajay k

Ja, es hat funktioniert. Vielen Dank. Ich habe den folgenden Code verwendet und gearbeitet: @PostMapping (value = Constant.API_INITIAL + "/ uploadFile") public UploadFileResponse uploadFile (@RequestParam ("file") MultipartFile-Datei, String jsonFileVo) {FileUploadVo fileUploadVo = null; try {fileUploadVo = new ObjectMapper (). readValue (jsonFileVo, FileUploadVo.class); } catch (Ausnahme e) {e.printStackTrace (); }
Anand_5050

Sie können den Inhaltstyp für contactDtoString auf application / json setzen. Sie können dies für jeden Schlüssel tun
Hritcu Andrei

7

Postman mehrteilige Formulardaten Inhaltstyp

Wählen Sie unter [SHOW COLUMNS] die Option [Content Type] und setzen Sie den Inhaltstyp von "application / json" auf den Parameter json text.



6

Wenn jemand JSON-Daten im Formulardatenformat senden möchte, muss er nur die Variablen wie folgt deklarieren

Briefträger:

Wie Sie sehen, wird der Beschreibungsparameter im Basis-JSON-Format vorliegen.

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

2

Ich musste beide übergeben: eine Datei und eine Ganzzahl. Ich habe es so gemacht:

  1. musste eine Datei zum Hochladen übergeben: tat es gemäß Sumits Antwort.

    Anfragetyp: POST

    Körper -> Formulardaten

    Geben Sie unter der Überschrift KEY den Namen der Variablen ein ('Datei' in meinem Backend-Code).

    im Backend:

    file = request.files['file']

    Neben "Datei" befindet sich ein Dropdown-Feld, in dem Sie zwischen "Datei" und "Text" wählen können. Wählen Sie "Datei" und unter der Überschrift " WERT" wurde "Dateien auswählen " angezeigt. Klicken Sie darauf, um ein Fenster zur Auswahl der Datei zu öffnen.

2. benötigt, um eine ganze Zahl zu übergeben:

ging zu:

Params

eingegebene Variablenname (zB: id) unter KEY unter: und seinem Wert (zB 1) VALUE

im Backend:

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

Hat funktioniert!


2

Verwenden Sie den folgenden Code auf der Seite der Federauflage:

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

Geben Sie hier die Bildbeschreibung ein


2

Für jeden Formulardatenschlüssel, den Sie für den Inhaltstyp festlegen können, befindet sich rechts eine Postbotenschaltfläche zum Hinzufügen der Spalte Inhaltstyp, und Sie müssen keinen JSON aus einer Zeichenfolge in Ihrem Controller analysieren.


1

Wenn Sie eine PUTAnfrage stellen möchten , tun Sie einfach alles als POSTAnfrage, aber fügen Sie _method=> PUTzu Ihren form-dataParametern hinzu.



0

Wenn Sie Cookies verwenden, um die Sitzung aufrechtzuerhalten, können Sie Interceptor verwenden , um Cookies vom Browser an den Postboten weiterzugeben .

Zum Hochladen einer Datei können Sie auch die Registerkarte Formulardaten unter der Registerkarte Körper des Postboten verwenden. Dort können Sie Daten im Schlüsselwertformat bereitstellen und für jeden Schlüssel den Wert des Textes / der Datei auswählen. Wenn Sie den Dateityp auswählen, wird die Option zum Hochladen der Datei angezeigt.


2
Für das, was Sie 500 bekommen. Können Sie bitte einige weitere Details teilen
Sandesh Jain

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.