【问题标题】:Uploading JSON and binary file in one request在一个请求中上传 JSON 和二进制文件
【发布时间】:2012-08-18 23:05:20
【问题描述】:

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

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

【问题讨论】:

    标签: java google-app-engine rest


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,这个让我走上正轨。我将把它作为一个表单发布到 API,其中一个字段中的对象的 JSON 字符串和另一个字段中的文件。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2023-04-11
    • 2015-05-13
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多