Как загрузить фотографию профиля пользователя, используя MULTIPART / FORM-DATA? - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь загрузить изображение (которое выбрано с мобильного телефона), используя MULTIPART / FORM-DATAg, и не смог понять, так как я новичок в Multipart. Загружаемыми данными являются изображение (НЕ КАК BASE64CODE) и идентификатор пользователя.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Вот решение для загрузки изображения с использованием Multipart

Добавить этот файл в зависимости

// Для нескольких частей

реализация 'com.karumi: dexter: 5.0.0'

Теперь в классе Activity, объявите это 2 поле

private RequestQueue rQueue;
Uri file_uri_1;

Следующим шагом является загрузка файла или копирование кода с ссылка

Теперь создайте функцию для загрузки вашего Imageview

private void uploadImage() {

    ProgressDialog dialog = new ProgressDialog(getActivity());
    dialog.setCancelable(false);
    dialog.setMessage("Please wait...");
    dialog.show();

    MultipartRequest volleyMultipartRequest = new MultipartRequest(Request.Method.POST, <URL API URL>,
            new Response.Listener<NetworkResponse>() {
                @Override
                public void onResponse(NetworkResponse response) {

                    dialog.dismiss();
                    rQueue.getCache().clear();
                    try {
                        JSONObject jsonObject = new JSONObject(new String(response.data));
                            <GET YOUR RESPONSE FROM SEVER HERE>
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    dialog.dismiss();
                    Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }) {

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            // Add parameter if you wish send extra parameters with Image
            params.put("<KEY>", <VALUE>);
            return params;
        }


        @Override
        protected Map<String, DataPart> getByteData() {
            Map<String, DataPart> params = new HashMap<>();
            // Check your file name or path is Empty or not
            if (fileName != null && !fileName.equalsIgnoreCase("")) {
                File file = new File(filePath);
                file_uri_1 = Uri.fromFile(file);
                params.put("<IMAGE KEY>", new DataPart(fileName, getFileDataFromDrawable(getActivity(), file_uri_1), getFileType(file_uri_1)));
            }

            return params;
        }
    };


    volleyMultipartRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    rQueue = Volley.newRequestQueue(getActivity());
    rQueue.add(volleyMultipartRequest);
}


public static byte[] getFileDataFromDrawable(Context context, Uri uri) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    try {
        InputStream iStream = context.getContentResolver().openInputStream(uri);
        int bufferSize = 2048;
        byte[] buffer = new byte[bufferSize];

        // we need to know how may bytes were read to write them to the byteBuffer
        int len = 0;
        if (iStream != null) {
            while ((len = iStream.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, len);
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
    return byteArrayOutputStream.toByteArray();
}

Надеюсь, этот код поможет вам.

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

Попробуйте, когда вы получите путь к файлу на

onActivityResult

Добавить этот код

String fileName = filePath.substring(filePath.lastIndexOf('/') + 1, filePath.length());
String ext = fileName.substring(fileName.lastIndexOf("."));

if ((ext.equalsIgnoreCase(".jpg"))
    || (ext.equalsIgnoreCase(".jpeg"))
    || (ext.equalsIgnoreCase(".png"))) {
    // Call method to upload your image 
} else {
    // Show alert to select Image with above extension
}

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

...