49

我正在努力使用 Postman Chrome 扩展创建 POST 多部分/混合请求

这是我的 curl 请求,效果很好

curl -H "Content-Type: multipart/mixed" 
-F "metadata=@simple_json.json; type=application/json "
-F "content=@1.jpg; type=image/jpg" -X POST http://my/api/item -i -v

反应的有趣部分

内容长度:41557

期望:100-继续

内容类型:多部分/混合;边界=----------------8aaca457e117

  • 附加的东西不好 transfer.c:1037: 0 0
  • HTTP 1.1 或更高版本,具有持久连接,支持流水线

当我使用邮递员时 在此处输入图像描述

我得到这样的回应

{"message":"Could not parse multipart servlet request;
 nested exception is org.apache.commons.fileupload.FileUploadException: 
 the request was rejected because no multipart boundary was     
 found","type":"error","status":500,"requestId":"1861eloo6fpio"}

就是这样 - 我希望摆脱那个错误。如果需要更多信息,请询问:)

4

2 回答 2

89

我也面临这个问题。简短的回答:Content-Type从您的 Postman 请求中删除标题。

长话短说,Content-Type对于一个多部分请求应该是相当特殊的——它应该看起来像这样:

multipart/form-data; boundary=----WebKitFormBoundaryzeZR8KqAYJyI2jPL

问题是边界很重要,它需要与用于分隔上传文件的边界完全匹配。解决方案很简单:不要指定Content-Type! 当您上传文件时,Postman 会自动为您附加上述内容类型,除了边界将填充 Postman 或 Chrome 用于分隔多部分内容的任何内容。

您可以通过使用 Chrome 开发人员工具(在 Postman 中)检查Content-Type正在添加的Content-Disposition标头以及多部分数据的标头来验证此行为,这也是手动构建的痛苦(并且在 Postman 中是不可能的)。

注意:我的答案是为需要multipart/form-data答案的人提供的解决方案。OP 正在寻找multipart/mixed解决方案。在这种情况下,我的回答是不够的。话虽如此,似乎很多人只是想要multipart/form-data解决方案,所以我将在这里留下我的答案。

于 2014-02-27T00:38:13.560 回答
1

将此评论留在:https ://github.com/postmanlabs/postman-app-support/issues/1104

Ninja 更新:不确定这是否对其他人有帮助,但对于在单个多部分 POST 请求中上传多个文件类型/内容类型的特定场景,有一种解决方法。

  1. 将标题设置Content-Typemultipart/mixed.
  2. 选择 中的form-data选项Body
  3. 将所有项目转换为文件。字符串内容应成为文本文件等。
  4. 通过选择 添加每个文件file,添加一个键名。

这种方法不需要实际手动指定每个Content-Typeor Content-Disposition。这里的技巧是将所有相关内容序列化为持久文件类型。如果是文本,您可以忽略“将其转换为文件”步骤 :) 希望对某人有所帮助!

于 2019-01-10T20:27:00.140 回答