在一个请求中上传JSON和二进制文件

我希望创建一个RESTful API,用于Android和iOS应用程序。 到目前为止,我一直在尝试在服务器上使用Jersey,然后在客户端使用相应的http库。 目前我一直使用multipart/related作为请求的mimetype,JSON构成了身体的第一部分,然后是jpeg图像作为第二部分。

到目前为止,我遇到了向服务器发出请求的问题,从Jersey获得了406 Not Acceptable 。 我注意到multipart/related主要用于发送电子邮件。 实际上是否有一种方法可以支持混合类型内容作为上传,或者我在这种情况下完全误解了multipart/related的用法?

您可以查看此博客,了解更多信息,但这是帮助您的重要部分:

http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/

 @POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) { String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName(); // save it writeToFile(uploadedInputStream, uploadedFileLocation); String output = "File uploaded to : " + uploadedFileLocation; return Response.status(200).entity(output).build(); } 

我希望你想要multipart / form-data,因为这是multipart / related的描述的一部分:

Multipart / Related媒体类型适用于复合对象
由几个相互关联的身体部位组成。 为一个
Multipart / Related对象,无法实现正确的显示
单独显示组成的身体部位。 Multipart / Related对象的content-type由type参数指定。
如果给出“start”参数,则通过内容ID指向
包含对象根的正文部分。 默认的根是
Multipart / Related体内的第一个身体部位。

有关此mime类型的更多信息,请查看

http://tools.ietf.org/html/rfc2387

如果您想要与json主体一起提交图像,则可以对图像进行base64编码并在json中包含base64字符串。 然后在服务器端,base64解码字符串并将图像文件上传到blobstore。 请参阅文件上传示例(位于页面底部) https://developers.google.com/appengine/docs/java/blobstore/overview

或者,您可以单独上载到blobstore并获取上载图像的blobkey。 然后,您可以在发布到服务器的json正文中包含blobkey。使用此方法,每次需要执行新的图像上载时,您都需要获取uploadurl。