如何在 okhttp3 中为每个多部分图像文件添加附加信息

Posted

技术标签:

【中文标题】如何在 okhttp3 中为每个多部分图像文件添加附加信息【英文标题】:How can I add additional information with each multipart image file in 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 有可能吗?请帮忙。

【问题讨论】:

【参考方案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。有可能吗?

以上是关于如何在 okhttp3 中为每个多部分图像文件添加附加信息的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中为按钮添加图像?

如何在下面顶部的集合视图中为部分添加标题

如何在Ionic中为缓存清除添加哈希到图像和其他静态资源?

优雅设计封装基于Okhttp3的网络框架:多线程下载添加数据库支持(greenDao)及 进度更新

如何在laravel 5.2中为每个文件添加用户ID以供下载?

如何在 C# 中为类名起别名,而不必向使用该类的每个文件添加一行代码?