Ошибка открытия Android 10: ENOENT (Нет такого файла или каталога)

Я столкнулся с проблемой с pdf, я хочу загрузить pdf с помощью Multipart, но проблема в том, что всякий раз, когда я передаю путь к файлу, Android 10 дает мне эту ошибку.

На ActivityResult:

Uri uri = data.getData();
String src = uri.getPath();
File file = new File(src);
RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("userfile", file.getName(), requestBody);

person Bhupathi office    schedule 03.02.2021    source источник
comment
еще раз... uri это не путь к файлу   -  person Selvin    schedule 03.02.2021
comment
хорошо, спасибо, что я должен сделать, чтобы получить путь к файлу   -  person Bhupathi office    schedule 03.02.2021
comment
создав собственный файл в частном хранилище приложений, затем скопируйте в него поток, указанный uri ... несколько раз спрашивал - нет, я не буду показывать код и не найду повторяющийся вопрос   -  person Selvin    schedule 03.02.2021
comment
поэтому мы не можем выбирать файлы из файлов намерений и загружать на сервер?   -  person Bhupathi office    schedule 03.02.2021
comment
Хорошо, есть ли ссылка на выбор файла и загрузку на сервер с помощью многокомпонентной модификации тела, пожалуйста, предоставьте   -  person Bhupathi office    schedule 03.02.2021
comment
Конечно, вы можете использовать uri напрямую для загрузки файла на сервер. Вы должны сделать это тоже ниже 10. Всегда.   -  person blackapps    schedule 03.02.2021
comment
да, это основная проблема. Не могли бы вы помочь мне с загрузкой файла Android 10 выше?   -  person Bhupathi office    schedule 03.02.2021
comment
Используйте uri напрямую, это было сообщение.   -  person blackapps    schedule 03.02.2021


Ответы (1)


context.contentResolver.openInputStream(uri).?use{
      // read bytes and create requestbody here
}

Не используйте RequestBody.create(MediaType.parse(/),file) в API 29 и выше, потому что он попытается открыть inputsteam, и будет выдано исключение (если включено хранилище с заданной областью и файл не с носителя) Используйте массив байтов.

person Kleinikov Stanislav    schedule 03.02.2021
comment
спасибо, братан, пожалуйста, сохрани массив байтов, чтобы загрузить, пожалуйста, в java - person Bhupathi office; 04.02.2021
comment
просто прочитайте байты из входного потока. В инете много примеров как это сделать. - person Kleinikov Stanislav; 04.02.2021
comment
используйте RequestBody.create(MediaType.parse(/), байты) - person Kleinikov Stanislav; 04.02.2021