Java Wildfly POST方法multipart / form-data:“无法获得边界......”

问题描述 投票:1回答:1

我在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方法的开始,该方法使用了一个文件和其他几个参数,如“name”。只要我提供一些参数和文件作为输入,一切都工作正常。如果没有提供文件,我也想用相同的方法提供一些输出。但在这种情况下,我总是得到这个错误:

java.io.IOException:RESTEASY007550:无法获取multipart的边界

如果我手动将请求的内容标题设置为multipart / form-data,情况就是如此。有没有解决办法用一个POST方法处理两个用例(params + file和only params)?

谢谢您的帮助!

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
java python-3.x wildfly multipartform-data resteasy
1个回答
0
投票

问题出在您使用的客户端库中: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
© www.soinside.com 2019 - 2024. All rights reserved.