【问题标题】:How can I add additional information with each multipart image file in okhttp3如何在 okhttp3 中为每个多部分图像文件添加附加信息
【发布时间】:2020-12-02 08:53:05
【问题描述】:

在这里,我将图像文件作为多部分数据动态发送到服务器:

MultipartBody.Builder builder = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("title", json);  

for (int i = 0; i < imageList.size(); i++) {
     File imageFile = imageList.get(i).getImageFile();
     if (imageFile.exists()) {
         builder.addFormDataPart("images[" + i + "]", imageList.getName(), RequestBody.create(MediaType.parse("image"), imageFile));
     }
}

MultipartBody requestBody = builder.build();

现在,我想将附加信息created_at 作为String 添加到服务器的每个图像。我怎样才能做到这一点? Retrofit/Volley 有可能吗?请帮忙。

【问题讨论】:

    标签: android retrofit2 android-volley multipartform-data okhttp


    【解决方案1】:

    您可以使用以下代码实现您的目标

    您的改造服务

     @Multipart
     @POST(value = "example/endpoint")
     Call<ResponseBody> uploadImages(
            @Part(value = "created_at") RequestBody createdAt,
            @Part(value = "image") MultipartBody.Part image
     );
    

    如何将 String 转换为 RequestBody

    RequestBody.create(String.valueOf(createdAt), MediaType.parse("text/plain"));
    

    【讨论】:

    • 感谢您的回答。但是此解决方案仅适用于单个图像。我想对图像列表做同样的事情,而不需要多次调用 API。
    • 不客气,也许你可以试试@Part(value = "images") List&lt;MultipartBody.Part&gt; images 而不是@Part(value = "image") MultipartBody.Part image
    • 但是我怎样才能为对应的List&lt;MultipartBody.Part&gt; 添加created_at 的列表。我想创建一个自定义对象列表,其中 CustomObject 将包含两个字段MultipartBody.Partcreated_at。有可能吗?
    猜你喜欢
    • 2021-10-03
    • 2021-10-24
    • 2020-12-02
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多