Самый удобный способ отправки файлов на удалённый сервер

Стоит задача отправлять на удалённый сервер файлы. Файлы выбирает пользователь. Файлов может быть 1 или несколько, они могут иметь разное расширение (изображения и видео разных форматов, pdf, zip и некоторые другие). На данный момент используется библиотека okhttp. Проблема в следующем: при выборе файлов пользователем, выбранные файлы приложение получает в виде URI (content://media/external/images/media/285045), а библиотеке okhttp для отправки файла необходимо предоставить реальный путь до файла (/storage/emulated/0/DCIM/Camera/IMG_20201029_195229.jpg). Да, есть способы получить реальный путь из URI, например:

    private String getRealPathFromURI(Uri contentURI) {
    String filePath;
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) {
        filePath = contentURI.getPath();
    } else {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        filePath = cursor.getString(idx);
        cursor.close();
    }
    return filePath;
}

Однако, во-первых, он работает только для изображений (можно найти варианты посерьёзнее, которые будут работать ещё для аудио и видео), во-вторых, не надёжен и часто выдаёт null (по крайней на Android 4.4 и выше). В общем после долгих поисков, мной был сделан вывод, что железно получить реальный путь из URI для файла любого формата просто невозможно. Собственно вопрос - как наиболее просто и удобно отправлять файлы на удалённый сервер? Рассматриваю любые варианты, может можно использовать какую-то другую библиотеку или как-то ещё обойти эту проблему. Посоветуйте, поделитесь примером, заранее спасибо.


Ответы (0 шт):