当前位置: 首页 > 知识库问答 >
问题:

使用Okhttp在多部分POST中传递数组

皇甫文乐
2023-03-14

我正在构建一个应用程序,需要一个API调用,在其POST body请求中有数组。我正在使用OkHttp 2.6请求API。

Postman中的请求如下所示:

为了实现这一点,我尝试了几种编写RequestBody的方法,

RequestBody requestBody = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addFormDataPart("app_token", MY_TOKEN)
        .addFormDataPart("user_id", 377)
        .addFormDataPart("group_id", String.valueOf(groupId))
        .addFormDataPart("key_id", deals.toString())
        .addFormDataPart("img", filename + ".jpg", fileBody)
        .build();
RequestBody requestBody = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addFormDataPart("app_token", MY_TOKEN)
        .addFormDataPart("user_id", 377)
        .addFormDataPart("group_id", String.valueOf(groupId))
        .addFormDataPart("key_id[0]", "33")
        .addFormDataPart("key_id[1]", "34")
        .addFormDataPart("img[0]", filename + ".jpg", fileBody)
        .build();
MediaType json = MediaType.parse("application/json; charset=utf-8");
Map<String, Integer> params = new HashMap<>();
for (int i = 0; i < deals.size(); i++) {
    params.put("key_id["+i+"]", Integer.valueOf(deals.get(i).getUid()));
}
JSONObject parameter = new JSONObject(params);
RequestBody theBody = RequestBody.create(json, parameter.toString());


RequestBody requestBodyyy = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addFormDataPart("app_token", MY_TOKEN)
        .addFormDataPart("user_id", 377)
        .addFormDataPart("group_id", String.valueOf(groupId))
        .addPart(theBody)
        .addFormDataPart("img[0]", filename + ".jpg", fileBody)
        .build();

共有1个答案

焦博实
2023-03-14

嗯,解决办法似乎很容易。我已经设法解决了这个问题,所以我无论如何都要在这里写给寻求同样解决方案的人。

MultipartBuilder multipartBuilder = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addFormDataPart("token", MY_TOKEN)
        .addFormDataPart("user_id", user_id)
        .addFormDataPart("group_id", group_id)
        // .addFormDataPart("img[0]", filename + ".jpg", RequestBody.create(MediaType.parse("image/png"), file));

for (int i = 0; i < keys.size(); i++) {
    multipartBuilder.addFormDataPart("key_id[" + i + "]", keys.get(i));
}

for (int i = 0; i < files.size(); i++) {
    filename = Utils.getSimpleTimestamp();
    multipartBuilder.addFormDataPart("img[" + i + "]", filename + ".jpg", RequestBody.create(MediaType.parse("image/png"), files.get(i)));
}

RequestBody requestBody = multipartBuilder.build();
Request request = new Request.Builder()
        .url(API_URL)
        .post(requestBody)
        .addHeader("content-type", "multipart/form-data;")
        .build();

OkHttpClient okHttpClient = new OkHttpClient();
 类似资料:
  • 在Android中使用OKHTTP以多部分方式上传单个大文件(更具体地说,上传到s3)时,我有什么选择?

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 我正试图在post请求负载中传递数组。 有效载荷: 我所做的是: 但我得到的回应是: “找不到请求数据”

  • 由邮递员生成以下代码: 此请求在服务器上生成一个大小为0 Kb的文件。而且我无法放文件。所以,我必须放一个这样的文件: 但我有一个超时选项。 如何使用这种Rest API放置文件?

  • 我试图从某个客户端向rails服务器发送POST请求,但遇到了一些问题。完整的要求是发送一个图像,用回形针处理,但它看起来像是一个带有Rails问题的普通邮递员多部分邮件。 我假设问题在于请求参数没有封装在“categories”中。请让我知道,如果我不够清楚,如果我可以提供更多的信息。 提前谢谢。 但我还是得到了同样的结果

  • 我有一个jax-rs REST服务,使用JEE 7(部署在glassfish中),它有一种在资源上处理HTTP POST的方法: 我尝试将多部分数据提取为: 然后,我尝试使用 RestClient(来自 wiztools.org)模拟客户端多部分 POST 请求,其中至少有 2 个部分具有不同的内容类型(边界分隔符由 RESTClient 工具自动设置)。 我在wireshark中验证它是否是从R