gpt4 book ai didi

java - 多部分表单数据不调用 Web 服务 API

转载 作者:行者123 更新时间:2023-12-01 13:12:13 25 4
gpt4 key购买 nike

我正在尝试从 iOS 客户端发送多部分表单数据。该数据是多部分数据,我确信这一点。

服务器基于 JAX-RS (Jersery)。如果我使用下面的代码

@POST
@Path("/customerdetail")
@Consumes({"multipart/form-data"})
public String postCustomerDetails(InputStream message){

StringBuilder inputStringBuilder = new StringBuilder();
BufferedReader bufferedReader; try { bufferedReader = new BufferedReader(new InputStreamReader(message, "UTF-8"));
String line = bufferedReader.readLine();
while(line != null){ inputStringBuilder.append(line);
inputStringBuilder.append('\n');
line = bufferedReader.readLine(); }
System.out.println(inputStringBuilder.toString());

}

我正在获取多部分表单数据作为输入流。但我陷入困境,除了实现繁琐的字符串操作之外,我应该如何进一步从输入字符串中提取数据。

如果我使用下面的代码

@POST
@Path("/customerdetail")
@Consumes({"multipart/form-data"})
public String postCustomerDetails(FormDataMultiPart formParams) {

}

postCustomerDetails 方法根本没有被调用。

任何有关如何解析多部分数据的输入都会非常有帮助。我使用的方法正确吗? Jersey 专家请。帮我。提前致谢。

最佳答案

在您的第一种方法中,您没有注释多部分请求中您想要的“部分”,因此您的 InputStream message返回所有原始多部分请求正文。

您需要做的是指定哪个表单名称包含您上传的文件。

例如,如果您的客户端有 <input type="file" name="myfile">

public String postCustomerDetails(@FormDataParam("myfile") InputStream message){...}

这样,message仅包含您上传文件的内容,因此您无需解析整个请求正文即可将其挖掘出来。

也许您没有在客户端应用程序中使用 html 表单,而是手动构建了一些多部分请求,您仍然需要知道表单中的名称是什么。

在您当前的方法中,只需打印出整个请求正文,它会是这样的:

Content-Type: multipart/form-data; boundary=Boundary_1_511262261_1369143433608

--Boundary_1_511262261_1369143433608
Content-Type: text/plain
Content-Disposition: form-data; name="hello"

hello
--Boundary_1_511262261_1369143433608
Content-Type: application/xml
Content-Disposition: form-data; name="xml"

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><jaxbBean><value>xml</value></jaxbBean>
--Boundary_1_511262261_1369143433608
Content-Type: application/json
Content-Disposition: form-data; name="json"

{"value":"json"}
--Boundary_1_511262261_1369143433608--

name="hello"就是你所追求的。然后你可以得到这样的3个部分:

public String postCustomerDetails(
@FormDataParam("hello") InputStream helloInput, // the file input for "hello"
@FormDataParam("hello") FormDataContentDisposition helloDetail, // optional, for getting file name and size, etc
@FormDataParam("xml") InputStream xmlInput,
@FormDataParam("xml") FormDataContentDisposition xmlDetail,
@FormDataParam("json") InputStream jsonInput,
@FormDataParam("json") FormDataContentDisposition jsonDetail
){...}

对于你的第二种方法 FormDataMultiPart ,我从来没有使用过低级 API,但我刚刚测试过,它可以工作。我不知道为什么它没有为你触发。

祝你好运。

关于java - 多部分表单数据不调用 Web 服务 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22758642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com