【问题标题】:How to upload a file and JSON data in Postman?如何在 Postman 中上传文件和 JSON 数据?
【发布时间】:2016-12-26 11:55:58
【问题描述】:

我正在使用 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;
        }
    }
}


我需要在邮递员和文件中传递会话 ID。我该怎么做?

【问题讨论】:

  • 一切都说完并完成后解决了我的问题,将[] 添加到文件上传参数的名称中,例如。 image[]file[]upload[]
  • 这是一个 2 分钟的快速视频教程youtu.be/sFlPa_Vow3w

标签: java json spring-mvc postman


【解决方案1】:

在 postman 中,将方法类型设置为 POST

然后选择 正文 -> 表单数据 -> 输入您的参数名称(文件根据您的代码)

在右侧值栏旁边,会有下拉“文本,文件”,选择文件。选择您的图片文件并发布。

对于其余基于“文本”的参数,您可以像通常使用邮递员一样发布它。只需输入参数名称并从右侧下拉菜单中选择“文本”并为其输入任何值,点击发送按钮。你的控制器方法应该被调用。

【讨论】:

  • 为什么是POSTPUT呢?
  • “不起作用”是什么意思?您为什么不向我们展示您的代码以便我们轻松调试问题?
  • 我的文本部分总是String。为什么它没有映射到我的 DTO? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity&lt;?&gt; postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto )在这种情况下我根本无法发送邮递员的请求
  • 我找到了我的解决方案。它不会自动映射到RequestDto。我把它当作一个字符串,解析 Json 并将其映射到 RequestDto 显式。
  • 这部分正确。您还必须将每个 json 字段的内容类型设置为 application/json。您可以通过单击 Postman 中“批量编辑”链接旁边的省略号来执行此操作。
【解决方案2】:

缺失的视觉指南

您必须首先找到File 几乎不可见的白底灰下拉菜单,这是解锁Choose Files 按钮的神奇钥匙。

之后选择POST然后选择Body-&gt;form-data然后找到文件下拉菜单,然后 em> 选择“文件”,只有这样“选择文件”按钮才会神奇地出现:

【讨论】:

  • 你是正确的,因为它的用户界面对非启动者是不可见的。谢谢你的视觉版!
  • 如果我有一个 XML 正文负载和附件怎么办?
  • gce 的回答似乎说你可以很容易地做到这一点?我不知道 。您可能必须通过了解多部分 mime 格式来学习如何将附件和 XML 组合成一个文档。这不是太复杂,您可以手动创建一个多部分的 mime 主体。
  • 两年过去了,UI没有任何改进。
  • 2021 年末关于 UI 和几乎不可见的下拉菜单的更新:如果当前 该行 的文本输入没有,您只能看到该下拉菜单持有光标。所以用tab键移开让它出现......
【解决方案3】:

也许你可以这样做:

【讨论】:

  • 你在那里设置了哪些 6 个标题?
  • 这个解决方案对我有用。没有通过任何标题,它工作正常。谢谢。传递 JSON 对我来说是棘手的部分。 :)
  • 哈,聪明 - 改变我的端点来做到这一点 :) 有点难看但超级方便
  • 你能解释一下你在说什么吗? @ChrisKoston
  • @GauravSharma 您是如何使用表单数据设置 JSON 的。你能分享输入请求吗?
【解决方案4】:

从[SHOW COLUMNS]中选择[Content Type],然后将“application/json”的content-type设置为json文本的参数。

【讨论】:

    【解决方案5】:

    看到所有答案后我感到很困惑,我找不到任何合适的屏幕截图来提供Content Type 列。一段时间后,我自己找到了它。希望这会对像我这样的人有所帮助。

    步骤如下:

    1. 点击红色邮递员标记区域。
    2. 现在检查 绿色 标记的选项 (Content Type)。
    3. 现在在黄色标记区域更改搜索内容类型。

    就我而言:

    1. invoice_id_ls(键)包含json 数据。
    2. documents 包含 file 数据。
    3. placed_amount 包含 normal text 字符串。

    【讨论】:

    • 文件名与要包含在附加 JSON 中的文件有什么关系?
    • 是的,这是这个任务的缺失部分。在手动设置其内容类型之前,Spring 不想将 json 文本视为 json。
    • 这个解决方案对我有用,是这篇文章中最清晰的答案。通常我的请求正文有几个字段,因此必须在CONTENT_TYPE 列中将几个键值巴黎设置为application/json。将文件保留为 auto 在同一列中。
    • 这是发送文件的正确答案 + 在表单数据发布请求中提交的 json 文本。非常感谢!!!
    【解决方案6】:

    像这样:

    正文 -> 表单数据 -> 选择文件

    你必须写“文件”而不是“名称”

    您还可以从 Body -> 原始字段发送 JSON 数据。 (只需粘贴 JSON 字符串)

    【讨论】:

    • 实际上我需要在邮递员中为一项服务传递一些值和文件是可能的
    • 标题?设置什么标题?
    • 该问题还要求上传json数据,此答案未涵盖。
    • 文件 + (json)?
    【解决方案7】:
    1. 不要提供任何标题。
    2. 将您的 json 数据放入 .json 文件中。
    3. 选择两个文件,一个是 .txt 文件,另一个是 .json 文件 为您的请求参数键。

    【讨论】:

    • 这是一个很好的答案。这也可以用于多个文件必须与多部分有效负载中的 json 有效负载一起上传的用例。
    • 如果您想发送文件以及 JSON 数据,这是最正确的答案。显示选择文件然后将 JSON 数据作为单个 JSON 字符串值传递或将值拆分的示例不起作用(可能取决于端点,但我无法验证这一点)。这里也提到了:github.com/postmanlabs/postman-app-support/issues/3331
    【解决方案8】:

    如果有人想以表单数据格式发送 json 数据,只需要像这样声明变量

    邮递员:

    如你所见,描述参数将是基本的 json 格式,结果:

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

    【讨论】:

      【解决方案9】:

      请按照下图从上到下的步骤进行操作。

      在第三步,您将找到类型选择的下拉菜单,如下图所示

      【讨论】:

        【解决方案10】:

        如果你需要喜欢 使用表单数据在 multipart 中上传文件并在同一 POST 请求中发送 json 数据(Dto 对象)

        在 Controller 中获取你的 JSON 对象作为 String 并通过添加此行使其反序列化

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

        【讨论】:

        • 你能告诉我这两个标题是什么用的吗?
        • Content-Type : application/json 授权 : Bearer (yourTokenString)
        • 是的,它奏效了。谢谢。我使用下面的代码并工作:@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); } 捕捉(异常 e){ e.printStackTrace(); }
        • 你可以将contactDtoString的Content-Type设置为application/json,你可以对每个key都这样做
        【解决方案11】:

        如果有人需要:

        正文 -> 表单数据

        将字段名添加为数组

        【讨论】:

          【解决方案12】:

          正文>二进制>选择文件

          【讨论】:

            【解决方案13】:

            在弹簧架侧使用以下代码:

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

            【讨论】:

              【解决方案14】:

              如果您想发出PUT 请求,只需将所有内容都作为POST 请求,但将_method => PUT 添加到您的form-data 参数中。

              【讨论】:

              • 这就是我要找的。我很困惑为什么它在 POST 上有效,但在 PUT. 之前无效。谢谢!!
              【解决方案15】:

              发送包含 json 数据的文件的多部分数据的方式如下,我们需要在 postman 正文选项卡中将各个 json 关键字段的 content-type 设置为“application/json”,如下所示:

              【讨论】:

                【解决方案16】:

                我需要同时传递:一个文件和一个整数。我是这样做的:

                1. 需要传递一个文件上传: 按照Sumit的回答做了。

                  请求类型:POST

                  正文 -> 表单数据

                  KEY 标题下,输入变量的名称(我的后端代码中的“文件”)。

                  在后台:

                  file = request.files['file']

                  “文件”旁边有一个下拉框,可让您在“文件”或“文本”之间进行选择。选择“文件”,在标题 VALUE 下,出现“选择文件”。单击它会打开一个窗口以选择文件。

                2。 需要传递一个整数:

                去了:

                参数

                KEY下输入变量名(例如:id)和在VALUE下的值(例如:1)

                在后台:

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

                成功了!

                【讨论】:

                  【解决方案17】:

                  对于每个表单数据键你可以设置Content-Type,右边有一个postman按钮可以添加Content-Type列,你不用在Controller里面从一个字符串解析一个json。

                  【讨论】:

                    【解决方案18】:

                    如果您使用 cookie 保持会话,您可以使用 interceptor 将 cookie 从浏览器共享给邮递员。

                    还可以上传文件,您可以使用 postman 上 body 选项卡下的 form-data 选项卡,您可以在其中提供键值格式的数据,并且您可以为每个键选择值文本/文件的类型。当您选择文件类型选项时出现上传文件。

                    【讨论】:

                    • 对于你得到的 500。你能分享更多细节吗
                    【解决方案19】:

                    如果您希望 Id 和 File 在一个对象中,您可以将您的请求对象作为标准添加到一种方法中,然后在 Postman 中将 Body 设置为表单数据并在您的键前面加上您的请求对象名称。例如request.SessionId 和 request.File。

                    【讨论】:

                      【解决方案20】:

                      首先,在方法中设置post并填写链接API

                      然后选择Body -> form-data -> 输入你的参数名(文件根据你的代码)

                      【讨论】:

                      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                      【解决方案21】:

                      后端部分

                      Controller 中的 Rest 服务将混合使用 @RequestPart 和 MultipartFile 来服务此类 Multipart + JSON 请求。

                      @RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
                      consumes = {"multipart/form-data"})
                      
                      @ResponseBody
                      public boolean yourEndpointMethod(
                          @RequestPart("properties") @Valid ConnectionProperties properties,
                          @RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
                      return projectService.executeSampleService(properties, file);
                      }
                      

                      在前端:

                      formData = new FormData();
                      
                      formData.append("file", document.forms[formName].file.files[0]);
                      formData.append('properties', new Blob([JSON.stringify({
                                  "name": "root",
                                  "password": "root"                    
                              })], {
                                  type: "application/json"
                              }));
                      

                      在图片中查看(POSTMAN 请求):

                      Click to view Postman request in form data for both file and json

                      【讨论】:

                        【解决方案22】:

                        要在邮递员中发送图像和 json 数据,您只需按照以下步骤操作。

                        • 制定您在邮递员中发帖的方法
                        • 转到正文部分并单击表单数据
                        • 提供您的字段名称,从下拉列表中选择文件,如下所示
                        • 您还可以提供其他字段。
                        • 现在只需在控制器中编写图像存储代码,如下所示。

                        邮递员:

                        我的控制器:

                        public function sendImage(Request $request)
                        {
                            $image=new ImgUpload;  
                            if($request->hasfile('image'))  
                            {  
                                $file=$request->file('image');  
                                $extension=$file->getClientOriginalExtension();  
                                $filename=time().'.'.$extension;  
                                $file->move('public/upload/userimg/',$filename);  
                                $image->image=$filename;  
                            }  
                            else  
                            {  
                                return $request;  
                                $image->image='';  
                            }  
                            $image->save();
                            return response()->json(['response'=>['code'=>'200','message'=>'image uploaded successfull']]);
                        }
                        

                        就是这样,希望对你有帮助

                        【讨论】:

                          猜你喜欢
                          • 2021-05-08
                          • 1970-01-01
                          • 2023-03-16
                          • 2020-02-11
                          • 2019-03-27
                          • 1970-01-01
                          • 2017-11-17
                          • 2017-12-20
                          相关资源
                          最近更新 更多