Отправить изображения как несколько частей с другими параметрами в запросе залпа - PullRequest
0 голосов
/ 10 октября 2018

Я отправлял запрос на сервер с двумя параметрами, используя запрос залпа, и он работал нормально.Теперь требование изменилось, и мне нужно отправить хотя бы одно изображение или максимум 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, но я не знаю, как передать данные из нескольких частей в этом запросе залпа.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 07 июня 2019

Хотя это старый вопрос, я решил опубликовать свой ответ здесь, поскольку у меня возникла та же проблема, и я смог ее решить.

Для загрузки изображения вместе с некоторыми другими параметрами я использовал залп.Тем не менее, я нашел оболочку из оригинальной библиотеки залпов, которую проще интегрировать для запросов из нескольких частей.Поэтому я добавил следующую библиотеку в файл 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);

Вы можете загрузить один файл за раз, используя эту библиотеку.Однако мне удалось загрузить несколько файлов, просто запустив несколько задач.

Надеюсь, это поможет!

...