【问题标题】:How to send nested json data and image together in one HTTP POST request in Android?如何在 Android 的一个 HTTP POST 请求中一起发送嵌套的 json 数据和图像?
【发布时间】:2015-09-08 17:34:30
【问题描述】:

我目前正在使用org.apache.http.entity.mime.MultipartEntityBuilder。以下不起作用:

.addPart("key", new StringBody(jsonObject.toString()))

.addTextBody("key", jsonObject.toString())

.addTextBody("key", jsonObject.toString(), ContentType.APPLICATION_JSON)

这里,jsonObjectorg.json.JSONObject

非嵌套字段和图像字段验证正确,但嵌套字段似乎没有填写(服务器返回“此字段为必填项。”)。

也欢迎不使用MultipartEntityBuilder 的解决方案。

【问题讨论】:

    标签: java android json http


    【解决方案1】:

    我对 Apache 的MultipartEntityBuilder一无所知。

    但您始终可以将图像作为 json 对象中的 Base64 字段发送。在服务器中,您需要将其映射到 byte[] 字段。

    【讨论】:

    • 这是一个不错的建议,但由于开销、潜在的内存不足错误以及服务器端的额外工作,我试图避免它。
    【解决方案2】:

    多部分数据不适用于嵌套 json。我决定扁平化服务器 API 中的嵌套字段。然后,构建请求仍然使用MultipartEntityBuilder

    HttpEntity entity = MultipartEntityBuilder.create()
    .addTextBody("inner_key1", jsonObject.get("inner_key1").toString())
    .addTextBody("inner_key2", jsonObject.get("inner_key2").toString())
    .addTextBody("inner_key3", jsonObject.get("inner_key3").toString())
    .addBinaryBody("image", new File(imagePath))
    .build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多