PostmanでファイルとJSONデータをアップロードする方法は?


134

私はSpring MVCを使用しており、これは私の方法です:

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


postmanでファイルとセッションIDを渡す必要があります。どうやってやるの?

回答:


221

postmanで、メソッドタイプをPOSTに設定します。

次に、ボディ->フォームデータ->パラメータ名を入力します(コードに応じたファイル

右側の値の列の横に、ドロップダウン「テキスト、ファイル」があります。[ ファイル]を選択します。画像ファイルを選択して投稿してください。

残りの「テキスト」ベースのパラメータについては、postmanで通常行うように投稿できます。パラメータ名を入力して、右側のドロップダウンメニューから「テキスト」を選択し、その値を入力して、送信ボタンをクリックするだけです。コントローラーメソッドが呼び出されます。


4
なんでPOST?どうPUTですか?
Green

4
「働かない」とはどういう意味ですか?問題を簡単にデバッグできるようにコードを表示してください。
Sumit Badaya 2017

2
いつものようにテキスト部分を取得しますString。DTOにマッピングされないのはなぜですか? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) この場合、IAMは郵便配達員からの要求をまったく送信できません
Arun Gowda

@ArunGowda新しい質問としてクエリを投稿してください。ここの質問のポスターとは異なり、与えられた回答は、OPがここに投稿した質問に関連しています。
Sumit Badaya 2018

1
私は自分の解決策を見つけました。RequestDto自動的にマッピングされません。私はそれを文字列として受け取り、Jsonを解析してRequestDto明示的にマッピングしました。
Arun Gowda

111

行方不明の視覚ガイド

まずFileChoose Filesボタンのロックを解除する魔法のキーである、ほとんど見えない白地に淡い灰色のドロップダウンを見つける必要があります。

後はあなたが選択しPOSTその後、選択しBody->form-dataその後、ファイルのドロップダウンを見つけて、それから「ファイル」を選択し、だけにして、ボタン「ファイルを選択」をします魔法のように表示されます。

Postman POSTファイルの設定-(テキスト、ファイル)ドロップダウンが強調表示されます


1
これのUIは、開始されていないユーザーには見えません。ビジュアル版ありがとうございます!
Vijay

XMLボディのペイロードと添付ファイルがある場合はどうなりますか?
tuxErrante

gceの答えはあなたがそれを簡単に十分にできると言っているようです?よく分かりません 。マルチパートMIME形式について学習して、添付ファイルとXMLを1つのドキュメントに結合する方法を学ぶ必要があるかもしれません。それほど複雑ではありませんが、マルチパートMIMEボディを手動で作成できます。
クリスFキャロル

2年後、UIは改善されていません。
Sabuncu

47

多分あなたはそれをこのようにすることができます:

postman_file_upload_with_json


8
そこで設定した6つのヘッダーは何ですか?
Green

1
この解決策は私にとってはうまくいきます。ヘッダーを渡さなかったため、問題なく動作しています。ありがとう。JSONを渡すことは私にとってトリッキーな部分でした。:)
Gaurav Sharma

ハ、賢いです-それをするために私のエンドポイントを変更しました:)少し醜いですが、とても便利です
クリスコストン2018

あなたが話していることを説明できますか?@ChrisKoston
tlalco

17

このような :

ここに画像の説明を入力してください

本文->フォームデータ->ファイルを選択

「名前」ではなく「ファイル」と書く必要があります

また、Body-> rawフィールドからJSONデータを送信できます。(JSON文字列を貼り付けるだけです)


3
実際に私はいくつかの値を渡し、1つのサービスのために郵便配達員にファイルを渡す必要があります。それは可能です
Harikrishnan KN '19

1
ヘッダー?設定するヘッダーは?
Green

11
この質問では、jsonデータのアップロードも求められますが、この回答ではここでは扱いません。
Rohit

:これを行うための正しい方法stackoverflow.com/questions/21329426/...
dassum

10
  1. ヘッダーを付けないでください。
  2. jsonデータを.jsonファイルに入れます。
  3. 両方のファイルを選択します。1つは.txtファイルで、もう1つはリクエストパラメータキーの.jsonファイルです。

これは良い答えです。これは...複数のファイルがマルチパートのペイロードにJSONペイロードと一緒にアップロードする必要があるユースケースのためにも使用することができます
キラン

これは、JSONデータだけでなくファイルも送信する場合の最も正しい答えです。ファイルを選択し、JSONデータを単一のJSON文字列値として渡したり、値を分割したりする例は機能しません(エンドポイントによって異なる可能性がありますが、確認できません)。また、ここで言及されていますgithub.com/postmanlabs/postman-app-support/issues/3331
ANTO

8

フォームデータを使用してマルチパートでファイルをアップロードし、同じPOSTリクエストでjsonデータ(Dtoオブジェクト)を送信する必要がある場合

コントローラの文字列としてJSONオブジェクトを取得し、この行を追加して非直列化します

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

1
使用されている2つのヘッダーは何ですか?
Abhisek Roy

Content-Type:application / json Authorization:bearer(yourTokenString)
Ajay k

はい、うまくいきました。ありがとう。以下のコードを使用して作業しました:@PostMapping(value = Constant.API_INITIAL + "/ uploadFile")public UploadFileResponse uploadFile(@RequestParam( "file")MultipartFile file、String jsonFileVo){FileUploadVo fileUploadVo = null; {fileUploadVo = new ObjectMapper()。readValue(jsonFileVo、FileUploadVo.class);を試してください。} catch(例外e){e.printStackTrace(); }
Anand_5050

contactDtoStringのContent-Typeをapplication / jsonに設定できます。これは、すべてのキーに対して行うことができます
Hritcu Andrei

7

Postman multipart form-data content-type

[SHOW COLUMNS]から[Content Type]を選択し、jsonテキストのパラメーターに「application / json」のcontent-typeを設定します。



6

誰かがフォームデータ形式でjsonデータを送信したい場合は、このように変数を宣言する必要があります

郵便配達:

ご覧のとおり、descriptionパラメータは基本的なjson形式になり、その結果は次のようになります。

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

2

ファイルと整数の両方を渡す必要がありました。私はこのようにしました:

  1. アップロードするファイルを渡す必要がありました:Sumitの回答に従ってそれを行いました。

    リクエストタイプ:POST

    本文 -> フォームデータ

    見出しKEYの下に、変数の名前(私のバックエンドコードの 'file')を入力しました。

    バックエンドで:

    file = request.files['file']

    「ファイル」の横にあるドロップダウンボックスで、「ファイル」または「テキスト」を選択できます。[ファイル]を選択すると、見出しVALUEの下に[ファイルを選択]が表示されます。これをクリックしてウィンドウを開き、ファイルを選択しました。

2.整数を渡す必要があります:

に行きました:

パラメータ

KEYの下に変数名(例:id)を入力し、VALUEの下にその値(例:1)を入力しました

バックエンドで:

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

働きました!


2

スプリングレスト側で以下のコードを使用します。

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

ここに画像の説明を入力してください


2

Content-Typeを設定できるフォームデータキーごとに、右側にContent-Type列を追加するpostmanボタンがあり、コントローラー内の文字列からJSONを解析する必要はありません。


1

PUTリクエストを作成する場合は、すべてをPOSTリクエストとして実行しますが、パラメータに_method=> PUTを追加しますform-data



0

Cookieを使用してセッションを維持している場合は、インターセプターを使用て、ブラウザーからPostmanにCookieを共有できます。

また、ファイルをアップロードするには、郵便配達員の本文タブの下にあるフォームデータタブを使用できます。このタブでは、データをKey-Value形式で提供でき、各キーに対して値のテキスト/ファイルのタイプを選択できます。ファイルの種類を選択すると、ファイルをアップロードするオプションが表示されます。


2
500を取得している場合、詳細を教えてください
Sandesh Jain

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.