1

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

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

4

2 回答 2

2

您可能想查看此博客以获取更多信息,但这里是帮助您的重要部分:

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 对象的内容类型由 type 参数指定。
“start”参数(如果给定)通过内容 ID 指向
包含对象根的正文部分。默认根是
Multipart/Related 正文中的第一个正文部分。

有关此 mime 类型的更多信息,您可以查看

https://www.rfc-editor.org/rfc/rfc2387

于 2012-08-19T00:39:12.403 回答
0

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

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

于 2012-08-19T08:10:00.777 回答