Java 在一个请求中上载JSON和二进制文件
我希望创建一个RESTful API,用于Android和iOS应用程序。到目前为止,我一直在尝试在服务器上使用Jersey,然后在客户端使用适当的http库。目前,我一直在使用Java 在一个请求中上载JSON和二进制文件,java,google-app-engine,rest,Java,Google App Engine,Rest,我希望创建一个RESTful API,用于Android和iOS应用程序。到目前为止,我一直在尝试在服务器上使用Jersey,然后在客户端使用适当的http库。目前,我一直在使用multipart/related作为请求的mimetype,JSON构成正文的第一部分,然后是一个jpeg图像作为第二部分 到目前为止,我在向服务器发出请求时遇到问题,从Jersey获得的406不可接受。我注意到,multipart/related主要用于发送电子邮件。有没有一种方法可以支持混合类型的内容作为上传,或者
multipart/related
作为请求的mimetype,JSON构成正文的第一部分,然后是一个jpeg图像作为第二部分
到目前为止,我在向服务器发出请求时遇到问题,从Jersey获得的
406不可接受
。我注意到,multipart/related
主要用于发送电子邮件。有没有一种方法可以支持混合类型的内容作为上传,或者我完全错误地理解了multipart/related
在这种情况下的用法?你可能想看看这个博客,了解更多信息,但这里有一个重要的部分可以帮助你:
我希望您需要多部分/表单数据,因为这是多部分/相关的描述的一部分:
多部分/相关媒体类型适用于复合对象由几个相互关联的身体部分组成。对于一个
多部分/相关对象,无法通过
单独显示身体的组成部分。内容类型 多部分/相关对象的类型由类型参数指定。
“开始”参数(如果给定)通过内容ID指向
包含对象根的主体部分。默认根目录是
多部分/相关主体中的第一个主体部分 有关此mime类型的更多信息,请参见
如果您希望随json正文一起提交图像,可以对图像进行base64编码,并在json中包含base64字符串。然后在服务器端,对字符串进行base64解码,并将图像文件上载到blobstore。请参见此处的文件上载示例(在页面底部)
或者,您可以单独上传到blobstore,并获取上传图像的blobkey。然后,您可以将blobkey包含在发布到服务器的json正文中。使用这种方法,每次需要上传新图像时,您都需要获得uploadurl。谢谢,这一点让我感到非常简单。我将把它作为一个表单发布到API中,在一个字段中使用对象的JSON字符串,在另一个字段中使用文件。您能分享一些如何为GAE上载执行此操作的示例吗。@AnkurJain,您是指使用带有base64编码blob的blobstore,还是指使用blobstore获取blob密钥?先生,我需要任何在GAE Blobstore中将文件作为Base64编码的Blob上载的示例。对于java,解码Base64:并写入Blobstore:。如果你需要更多的信息,问一个问题。
@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();
}