Я отправлял запрос на сервер с двумя параметрами, используя запрос залпа, и он работал нормально. Теперь требование изменилось, и мне нужно отправить на сервер хотя бы одно изображение или максимум 3 изображения вместе с двумя другими параметрами. Изображение должно быть отправлено как составное. У меня есть следующий код для получения изображения из галереи и сохранения их путей к файлам в списке.
List<String> imagePathList = imageFilePaths;
List<MultipartBody.Part> partMap = new ArrayList<>();
for (int i = 0; i < imagePathList.size(); i++) {
Uri fileUri = Uri.parse(imagePathList.get(i));
RequestBody requestFile = RequestBody.create(
MediaType.parse(getMimeTypee(FileUtils.getFile(getContext(), fileUri).getAbsolutePath())),
FileUtils.getFile(getContext(), fileUri)
);
MultipartBody.Part body = MultipartBody.Part.createFormData("court_image[" + i + "]", FileUtils.getFile(getContext(), fileUri).getName(), requestFile);
partMap.add(body);
}
Где imageFilePaths - это ArrayList. Сервер будет получать изображения, такие как court_image[0], court_image[1] и т. д., В зависимости от того, сколько путей к изображениям у меня есть в ArrayList.
Запрос на залп здесь:
RequestQueue queue = Volley.newRequestQueue(getContext());
StringRequest postRequest = new StringRequest(Request.Method.POST, url1,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(mBaseAppCompatActivity, "Success", Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
String token = getToken();
params.put("Authorization", "Bearer " + token);
params.put("Content-Type", "multipart/form-data");
return params;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("terms", "true");
params.put("phone", "phoneNo");
return params;
}
};
queue.add(postRequest);
Теперь дело в том, что я новичок в многочастной вещи, с ее помощью я могу получить изображение из галереи и сохранить их путь в ArrayList, но я не знаю, как передать многосоставные данные в этом залпе. запрос. Пожалуйста помоги.




Хотя это старый вопрос, я подумал, что должен опубликовать здесь свой ответ, так как у меня была такая же проблема, и я смог ее решить.
Для загрузки изображения вместе с некоторыми другими параметрами я использовал залп. Однако я нашел оболочку исходной библиотеки volley, которую легче интегрировать для многостраничных запросов. Поэтому я добавил в файл build.gradle следующую библиотеку.
dependencies {
compile 'dev.dworks.libs:volleyplus:+'
}
Я удалил оригинальную библиотеку волейбола со своего build.gradle и вместо этого использовал указанную выше библиотеку, которая может обрабатывать как составные, так и обычные запросы с аналогичной техникой интеграции.
Затем мне просто нужно было написать следующий класс, который обрабатывает операцию запроса POST.
public class POSTMediasTask {
public void uploadMedia(final Context context, String filePath) {
String url = getUrlForPOSTMedia(); // This is a dummy function which returns the POST url for you
SimpleMultiPartRequest multiPartRequestWithParams = new SimpleMultiPartRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("Response", response);
// TODO: Do something on success
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle your error here
}
});
// Add the file here
multiPartRequestWithParams.addFile("file", filePath);
// Add the params here
multiPartRequestWithParams.addStringParam("terms", "SomeTerms");
multiPartRequestWithParams.addStringParam("phone", "85050055055");
RequestQueue queue = Volley.newRequestQueue(context);
queue.add(multiPartRequestWithParams);
}
}
Теперь выполните следующую задачу.
new POSTMediasTask().uploadMedia(context, mediaPath);
Вы можете загружать по одному файлу за раз, используя эту библиотеку. Однако мне удалось загрузить несколько файлов, просто запустив несколько задач.
Надеюсь, это поможет!
Это должно быть довольно просто без использования библиотеки. Быть настолько зависимым от библиотек, которые могут не часто обновляться ... я думаю, что это не очень хорошая идея.