Как загрузить файл изображения на сервер вместе с моими строковыми параметрами с помощью Volley

#android #server #android-volley #image-uploading

#Android #сервер #android-volley #загрузка изображений

Вопрос:

Я пытаюсь загрузить изображения с помощью библиотеки volley, я не знаю, как именно.

Я ссылался на ранее заданные вопросы, но, похоже, ничего не удовлетворяет.

Вот что мне нужно было достичь :

введите описание изображения здесь

Ниже приведен код, который я пытался использовать :

 StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    Log.d("**********", " Response Received is  "   response);

                    try {

                        JSONObject jsonObject = new JSONObject(response);

                        Log.d("**********", "STRING TO JSON CONVERSION DONE , IT IS   "   jsonObject.toString());

                        ParseReqOtp parseReqOtp = new ParseReqOtp();
                        parseReqOtp.parseImageupload(jsonObject);


                    } catch (Exception e) {
                        Log.d("**********", "ERROR IN STRING TO JSON CONVERSION     "   e.toString());

                    }
                    Log.d("**********", "FETCHING IN VOLLEY REQ"   response);




                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(AddPic.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }) {
        @Override
        protected HashMap<String,String> getParams() {

           HashMap<String, String> params = new HashMap<String, String>();
        params.put("id", BaseActivity.getBaseActivity().getEstablishment_id());
        params.put("type", "photos");
        params.put("example_file",file.toString());

        }


    };
  

Комментарии:

1. Используйте стороннюю библиотеку Cloudinary для загрузки изображения. Это CDN, в котором вы можете сохранять изображения и извлекать их из него в разных разрешениях.

2. Кажется, вы отправляете изображение в виде файла. Вам нужно использовать MultipartEntity с volley.

3. params.put("example_file",file.toString() . Что ж, если у вас возникли проблемы с загрузкой файла, вы должны точно показать, что и как вы помещаете содержимое file .

4. You need to use MultiPartEntity with volley . Нет. Это неверно, глядя на эту x-www-form-urlencoded схему. Если это действительно работает. Но OP, к сожалению, не сказал.

Ответ №1:

 private void uploadImageWithStringParamsToServer() {
    SimpleMultiPartRequest smr = new SimpleMultiPartRequest(Request.Method.POST, "http://139.59.16.103/addImage",
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("Response", response);

                Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();

            }
        }, 
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
            }
    });

  smr.addStringParam("id", "821470");
  smr.addStringParam("type", "photos");
  smr.addFile("example_file", "2014-11-17 17.08.33-2.jpg");
  smr.setFixedStreamingMode(true);
  smr.setOnProgressListener(this);

  RequestQueue mRequestQueue = Volley.newRequestQueue(this);
  mRequestQueue.add(smr);
  mRequestQueue.start();
}
  

Комментарии:

1. смотрите github.com/DWorkS/VolleyPlus/blob/master/library/src/com/… @AnishKumar

2. Спасибо @Clive Seebregts

3. @CliveSeebregts Предположим, что я получаю uri (data.getData) из onActivityResult после выбора изображения из галереи. Как мне передать этот uri в smr.addFile(«example_file», «???») для отправки запроса?