【问题标题】:Java Wildfly POST method multipart/form-data: "Unable to get boundary..."Java Wildfly POST 方法 multipart/form-data:“无法获取边界...”
【发布时间】:2019-07-08 08:30:15
【问题描述】:

java 中的 post 方法有问题:

@POST
@Path("/test")
@Produces("application/xml")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String testing(MultipartFormDataInput input)
{
    Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
    String name = this.getFormValue(uploadForm, "name");

    List<InputPart> inputParts = uploadForm.get("file");
...
}

清单显示了 POST 方法的开始,该方法使用一个文件和几个其他参数,如“名称”。只要我提供一些参数和文件作为输入,一切都工作正常。 如果没有提供文件,我也想用相同的方法提供一些输出。但在这种情况下,我总是得到这个错误

java.io.IOException: RESTEASY007550: 无法获取边界 多部分

即使我手动将请求的内容标头设置为 multipart/form-data 也是如此。 是否有任何解决方案可以使用一种 POST 方法来处理两种用例(参数 + 文件和仅参数)?

感谢您的帮助!

python中的客户端代码:

payload = {"name": "test"}
file = {"file": open("test.zip", "rb")}
url = "http://localhost:8080/test_war/test/test"
r = requests.post(url, data=payload, files=file)
print r.text
print r.status_code

【问题讨论】:

  • 错误出现在您的客户端代码中。可以发一下吗?
  • 添加了客户端代码。到现在为止,我用相同的@Path 的第二个 Post 方法解决了我的问题。

标签: java python-3.x wildfly multipartform-data resteasy


【解决方案1】:

问题出在您使用的客户端库中: https://github.com/kennethreitz/requests/blob/bedd9284c9646e50c10b3defdf519d4ba479e2c7/requests/models.py#L503

这一行假设如果你传递文件,那么它是一个多部分请求,没有文件它会做其他事情。

添加具有不同参数名称的假文件应该满足您的服务器端代码:

file_name ="test.zip"
if file_name:
    files = {"file": open("test.zip", "rb")}
else:
    files = {"dummy_file": "nothing"}
url = "http://localhost:8080/test_war/test/test"
r = requests.post(url, data={"name": "test"}, files=files)
print r.text
print r.status_code

【讨论】:

  • 感谢您的回答。我只是觉得有点奇怪,如果我手动将内容类型设置为 multipart/data-form,我也会收到错误消息。编辑:愚蠢的错误,我用大写 C Oo 写了“内容类型”
猜你喜欢
  • 2011-04-22
  • 2016-09-08
  • 2021-10-20
  • 2017-10-11
  • 2021-08-03
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多