webservice与文件输入流和一个json体? [英] webservice with a file inputstream and a json body?
问题描述
我想用cxf实现一个webservice来上传一个文件,其中包含一些关于它的信息。
I would like to implement a webservice with cxf to upload a file with some informations about it contained in the body.
我做了什么,但没有工作尚未完成:
What I've done but didn't work yet :
@POST
@Path("/")
@Consumes(MediaType.MULTIPART_FORM_DATA)
User addDocument(
@Multipart(value="metadata", type="application/json") DocMeta metadata,
@Multipart(value="inputstream", type="multipart/form-data") InputStream inputStream)
throws ObjectAlreadyExistsException;
当我尝试使用curl请求我的服务时不起作用:
When I try to request my service with curl it doesn't work :
curl http://localhost:9090/...
--X POST
-H"Content-Type:multipart/form-data"
-F inputstream=@myFile.txt
-d'{"info1":"info1","info2":"info2"}'
真的可以同时拥有多部分数据和一个带有cxf的json体
Is it really possible to have both multipart data and a json body with cxf ??
感谢提前
Manu
推荐答案
。但问题是你的cURL请求。您应该将所有部分添加为 - form / -F
。您尝试将JSON作为正常主体发送。尝试我会得到一个错误与cURL,它甚至不会发出请求。还需要为每个部分设置Content-Type。例如
Yes it's possible. But the problem is with your cURL request. You should add all parts as --form/-F
. You are trying to send the JSON as a normal body. Attempting that I would get an error with cURL, it wouldn't even send out the request. Also you need to set the Content-Type for each part. For example
C:\>curl -v -H "Content-Type:multipart/form-data"
-H "Accept:application/json"
-F "stream=@android.png;type=application/octet-stream"
-F "person={\"name\":\"peeskillet\"};type=application/json"
-X POST http://localhost:8080/rest/multipart`
(当然在一行上)。这里是我用来测试的资源方法。
(All on one line of course). Here's the resource method I used to test.
public static class Person {
public String name;
}
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response postMultiPart(
@Multipart(value="stream", type="application/octet-stream") InputStream img,
@Multipart(value="person", type="application/json") Person person) throws Exception {
Image image = ImageIO.read(img);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.add(new JLabel(new ImageIcon(image)));
frame.setVisible(true);
return Response.ok(person).build();
}
这是我作为文件发送的图像。
It was an image that I sent as a file.
或者,您可以获得附件
,这将为您提供有关文件的更多信息。
Alternatively, you can get an Attachment
, which will give you more info on the file.
public Response postMultiPart(
@Multipart(value="stream") Attachment img,
@Multipart(value="person", type="application/json") Person person) throws Exception {
Image image = ImageIO.read(img.getObject(InputStream.class));
- 请参阅 Multipart支持了解CXF支持的更多信息
- See Multipart Support for more info on CXF support
这篇关于webservice与文件输入流和一个json体?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!