Самый удобный способ отправки файлов на удалённый сервер
Стоит задача отправлять на удалённый сервер файлы. Файлы выбирает пользователь. Файлов может быть 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 для файла любого формата просто невозможно. Собственно вопрос - как наиболее просто и удобно отправлять файлы на удалённый сервер? Рассматриваю любые варианты, может можно использовать какую-то другую библиотеку или как-то ещё обойти эту проблему. Посоветуйте, поделитесь примером, заранее спасибо.