如何在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;
        }
    }
}


我需要在邮递员和文件中传递会话ID。我怎样才能做到这一点?

Answers:


221

在邮递员中,将方法类型设置为POST

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

且右侧旁边值列,会出现下拉菜单“文本文件”,选择文件。选择您的图像文件并将其发布。

对于其他基于“文本”的参数,您可以像通常使用postman一样进行发布。只需输入参数名称,然后从右侧的下拉菜单中选择“文本”,然后为其输入任何值,请点击发送按钮。您的控制器方法应被调用。


4
为什么POST呢 那PUT
绿色

4
“不工作”是什么意思?您为什么不显示您的代码以便我们轻松调试问题?
Sumit Badaya '17

2
String一如既往地获得了文字部分。为什么它不映射到我的DTO? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) 在这种情况下,我完全无法发送邮递员的要求
Arun Gowda

@ArunGowda尝试将您的查询发布为新问题。由于与此处的问题发帖人不同,给出的答案与OP在此处发布的问题有关。
Sumit Badaya '18

1
我找到了解决方案。它不会RequestDto自动映射。我将其作为字符串,进行了解析Json并将其RequestDto显式映射到。
阿伦·古达

111

失踪的视觉指南

您必须首先找到几乎看不见的白灰色下拉菜单,File该下拉菜单是用于解锁Choose Files按钮的魔术钥匙。

之后您选择POST然后选择Body->form-data然后找到该文件下拉菜单,然后选择“文件”,只有将“选择文件”按钮,奇迹般地出现:

邮递员POST文件设置-(文本,文件)下拉框突出显示


1
您是正确的,因为该用户界面对于未启动的用户是不可见的。谢谢您的视觉版本!
维杰

如果我有XML主体有效负载和附件怎么办?
tuxErrante

gce的回答似乎表明您可以轻松做到这一点?我不确定 。您可能需要通过了解多部分mime格式来学习如何将附件和XML组合到一个文档中。不太复杂,您可以手动创建多部分的mime主体。
克里斯·卡罗尔

两年后,UI尚未得到任何改善。
Sabuncu

47

也许您可以这样:

postman_file_upload_with_json


8
您在那里设置了6个标题?
绿色

1
此解决方案对我有用。没有传递任何标题,它工作正常。谢谢。对我来说,传递JSON是棘手的部分。:)
Gaurav Sharma

哈,聪明-改变了我的端点来做到这一点:)有点丑陋,但非常方便
克里斯·科斯顿

你能解释你在说什么吗?@ChrisKoston
tlalco

17

像这样 :

在此处输入图片说明

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

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

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


3
实际上,我需要传递一些值并在邮递员中提供一项服务的文件是可能的
Harikrishnan KN

1
标头?要设置什么标题?
格林

11
该问题还要求上传json数据,此答案此处未涉及。
罗希特


10
  1. 不要提供任何标题。
  2. 将您的json数据放入.json文件中。
  3. 选择两个文件,一个是您的.txt文件,另一个是.json文件作为请求参数密钥。

这是一个很好的答案。这也可以用来使用的情况下,多个文件具有与多部分有效载荷的有效载荷JSON一起上传..
基兰

如果您要发送文件以及JSON数据,这是最正确的答案。显示选择文件然后将JSON数据作为单个JSON字符串值传递或拆分这些值的示例不起作用(可能取决于端点,但我无法验证这一点)。这里也提到了它:github.com/postmanlabs/postman-app-support/issues/3331
Anto

8

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

在Controller中将JSON对象作为String获取,并通过添加以下行使其反序列化

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

1
您能告诉我两个标头是什么吗?
Abhisek Roy

内容类型:application / json授权: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(Exception e){e.printStackTrace(); }
Anand_5050

您可以将contactDtoString的Content-Type设置为application / json,您可以为每个键执行此操作
Hritcu Andrei

7

邮递员多部分表单数据内容类型

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



6

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

邮差:

如您所见,description参数将采用基本的json格式,其结果是:

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

2

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

  1. 需要传递文件进行上传:按照Sumit的回答进行了操作。

    请求类型:POST

    正文 -> 表单数据

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

    在后端:

    file = request.files['file']

    在“文件”旁边,有一个下拉框,允许您在“文件”或“文本”之间进行选择。选择“文件”并在标题下的价值,“选择文件”出现了。单击此按钮将打开一个窗口以选择文件。

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

在此处输入图片说明



1

如果要发出PUT请求,只需将所有操作作为POST请求,但在参数中添加_method=> PUT即可form-data



0

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

另外,要上传文件,您可以使用邮递员的“正文”标签下的“表单数据”标签,在其中可以提供键值格式的数据,并且对于每个键,您都可以选择值文本/文件的类型。当您选择文件类型时,出现了用于上传文件的选项。


2
如果您要得到500,请分享更多详细信息
Sandesh Jain

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.