Как я могу отправлять изображения и данные «key» «value» в Okhttp?

#java #android #oop #android-asynctask #okhttp

#java #Android #ооп #android-asynctask #okhttp

Вопрос:

В моем приложении code я написал метод, который отправляет ключ и значение с помощью FormBody.Builder , но мне также нужно отправить изображение. Как я могу это сделать?

Я написал это

 _formBuilder.add("id_user","1");
_formBuilder.add("name","David");
  

И затем я отправляю это значение в Constructor из AsyncTask , который получает параметры:

 try {
    Request _rbuilder = new Request.Builder()
                        .url(url)
                        .addHeader("Content-Type", "application/json; charset=utf-8")
                        .post(_parameters)
                        .build();
    Response _res= _client.newCall(_rbuilder).execute();
    return _res.body().string();
} catch (Exception ex) {
    Log.i("Error task", ex.toString());
}
  

Ответ №1:

Вы можете использовать multipart/form-data для загрузки на свой сервер. Сначала создайте MultipartBody с помощью MultipartBody.Builder

 MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();
multipartBodyBuilder.setType(MultipartBody.FORM);
multipartBodyBuilder.addFormDataPart("key", "value");
MediaType mediaType = MediaType.parse("image/png"); // or "image/jpeg" or any mime type you want
multipartBodyBuilder.addFormDataPart(
        "fileKey",
        "fileName",
        RequestBody.create(mediaType, yourFile)
);
  

Затем используйте это как данные post в вашем запросе

 Request _rbuilder = new Request.Builder()
    .url(url)
    .addHeader("Content-Type",
            "application/json; charset=utf-8"
    )
    .post(multipartBodyBuilder.build())
    .build();