У меня есть довольно сложный POST, который я пытаюсь сделать с помощью Retrofit2.
@Multipart
@FormUrlEncoded
@POST("post")
Call<JSONObject> createPost(
@Field("name") String name,
@Part("media_1") MultipartBody.Part mediaOne,
@Part("media_2") MultipartBody.Part mediaTwo,
@Part("media_3") MultipartBody.Part mediaThree,
@Part("media_4") MultipartBody.Part mediaFour,
@Part("media_5") MultipartBody.Part mediaFive,
@Header("secret_key") int secretKey
);
Он содержит различные аспекты, такие как параметр с именем «name», который я обычно думаю размещать с @Field и с @FormUrlEncoded. Я понимаю, что у меня не может быть @Multipart и @FormUrlEncoded одновременно, поэтому я думаю, что хотел бы удалить @FormUrlEncoded из приведенного выше примера кода и заменить @Field на @Part. Это верно?
Затем я получаю исключение: «Параметры @Part, использующие MultipartBody.Part, не должны включать имя части в аннотации». Но я не могу просто удалить @Part ("media_1") и т. Д., Потому что эти названия частей гарантируют, что медиафайл загружен в правильное место. Какое здесь решение?
Это самый сложный вызов Retrofit2, который я когда-либо делал. Спасибо, что нашли время, чтобы просмотреть мой вопрос.
Вот где я использую вызов Retrofit2 на тот случай, если полезно использовать его в качестве контекста:
file0 = FileUtils.getFile(filePath);
requestFile0 = RequestBody.create(MediaType.parse("multipart/form-data"), file0);
body0 = MultipartBody.Part.createFormData("image0", file0.getName(), requestFile0);
file1 = FileUtils.getFile(constructedLog.getLogImageLocations().get(1));
requestFile1 = RequestBody.create(MediaType.parse("multipart/form-data"), file1);
body1 = MultipartBody.Part.createFormData("logImage1", file1.getName(), requestFile1);
//etc for file2, file3, file4
Call<JSONObject> call = apiService.getApi().createPost(
getName(),
body0,
body1,
body2,
body3,
body4,
secretKey
);