如何在Jersey中使用嵌套的MultiPart?

时间:2018-04-17 18:41:14

标签: java http jersey mime multipart

我正在尝试编写一个REST端点,它接收多个文件(作为输入流)和有关这些文件的数据(如Json)。

这是我的客户:

public void doSomething() {
MultiPart parent = new MultiPart(MultiPartMediaTypes.createMixed());
MultiPart child = new MultiPart(MultiPartMediaTypes.createMixed());
child.bodyPart(new BodyPart(someObject, MediaType.APPLICATION_JSON_TYPE));
child.bodyPart(new StreamDataBodyPart(someInputStream));
child.bodyPart(new StreamDataBodyPart(someOtherInputStream));
BodyPart bp = new BodyPart(child, MultiPartMediaTypes.createMixed());
parent.bodyPart(bp);
client.post(Entity.entity(parent, MultiPartMediaTypes.createMixed());
}

这是我的服务器:

@POST
@Path("something")
@Consumes(MultiPartMediaTypes.MULTIPART_MIXED)
public Response multiPart( @Context HttpServletRequest httpServletRequest, 
MultiPart multiPart) {

List<BodyPart> bodyParts = multiPart.getBodyParts();

for(BodyPart bp : bodyParts) {
MultiPart multiPart = (MultiPart)bp.getEntity();
}
}

理想情况下,我应该能够在该bodyPart上接收读取实体作为MultiPart。我应该能够访问底层的多部分。但我得到一个类强制转换异常(因为实体是一个BodyPartEntity)。

但是,在接收端,我得到一个包含bodyPart的MultiPart,其实体是BodyPartEntity,它只提供一个InputStream。输入流包含嵌套MultiPart的所有内容,但理想情况下,我应该只能将其作为MultiPart接收并直接从那里读取。

输入Stream看起来像这样:

--Boundary_3_1589640004_1523988834754

Content-Type: application/json
{"someJson" : "value"}

--Boundary_3_1589640004_1523988834754

Content-Type: application/octet-stream
Content-Disposition: form-data; filename="test.txt"; name="test.txt"
(a bunch of characters representing the image)

--Boundary_3_1589640004_1523988834754

这两个问题正在问我究竟是在问什么,但它们似乎都不适合我

How to consume a nested multipart/mixed mime type in jersey

Jersey reading nested Multipart (multipart/mixed)

如何在不必手动解析InputStream的情况下轻松访问基础MultiPart?我错过了什么?

0 个答案:

没有答案