создайте путь из uri — ошибка — исключение, выданное в — MultipartUploadRequest — в addFileToUpload(путь, «изображение»)

#android #image #http #multipartform-data

Вопрос:

Я намерен загрузить изображение с android на php-сервер. Я прокомментировал все в файле php(пустой файл php). Я получаю исключение в MultipartUploadRequest в строке addFileToUpload(путь, «изображение»). Я разделил исходный вызов функции на несколько частей.
код:

 try {
            String uploadId = UUID.randomUUID().toString();

            //Creating a multi part request
            MultipartUploadRequest a = new MultipartUploadRequest(this, uploadId, Constants.UPLOAD_URL);
            imageName.setText("ill.exc1");
            MultipartUploadRequest b = a.addFileToUpload(path, "image"); //Adding file
            imageName.setText("ill.exc2");
            //Adding text parameter to the request
            MultipartUploadRequest c = b.addParameter("name", name); //Adding text parameter to the request
            imageName.setText("ill.exc3");
            MultipartUploadRequest d = c.setNotificationConfig(new UploadNotificationConfig());
            imageName.setText("ill.exc4");
            MultipartUploadRequest e = d.setMaxRetries(2);
            imageName.setText("ill.exc5");
            e.startUpload(); //Starting the upload
            imageName.setText("ill.exc6");

        } catch(IllegalArgumentException exc) {

        }catch(MalformedURLException exc) {
            imageName.setText("malf");
        }catch (Exception exc) {
            //Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
            imageName.setText("exc");
        }
 

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

 Uri uri;
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);


String path = getPath1(Uri uri);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE_REQUEST amp;amp; resultCode == RESULT_OK amp;amp; data != null amp;amp; data.getData() != null) {
            uri = data.getData();
}
}
 

Для изображения с именем «IMG-20210917-WA0002.jpg» в «телефон/WhatsApp/Медиа/изображения WhatsApp»; путь отображается как-> «/документ/изображение:1009». Правильно ли это?

 private String getPath1(Uri uri) {
        File file = new File(uri.getPath());//create path from uri
        String path = file.getPath();
        return path;
    }
 

Ответ №1:

Это сработало отлично

 private String getPath4(Uri uri) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":")   1);
        cursor.close();

        cursor = getContentResolver().query(
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID   " = ? ", new String[]{document_id}, null);
        cursor.moveToFirst();
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();

        return path;
    }