Я использую react-native-document-picker
для выбора файлов и отправки их на сервер. После выбора файла я использую RNFetchBlob.fs.stat(uri)
из пакета rn-fetch-blob
, чтобы получить реальный путь из URI, который мне дает сборщик. Он отлично работает с файлами внутреннего хранилища, но когда я выбираю изображение из раздела «SD-карта», функция stat
выдает исключение, которое говорит что-то вроде этого:
не удалось указать путь null, потому что он не существует или это не папка
Удивительно, но когда я выбираю раздел «Изображения», захожу в папку SD-карты и выбираю то же самое изображение, оно работает просто отлично! У меня такая же проблема с разделом "Загрузки".
URI, который возвращает средство выбора, это когда я выбираю изображение из раздела «Изображения»:
content://com.android.providers.media.documents/document/image%3A76431
и когда я выбираю из раздела "SD-карта": content://com.android.externalstorage.documents/document/F673-1818%3Abbb.png
Прямо сейчас я использую этот код, но это не правильное решение, потому что оно какое-то грязное и работает не на всех устройствах.
if(uri.substr(0,57) === "content://com.android.externalstorage.documents/document/"){
let filePath = decodeURIComponent(uri.substr(57));
let subUri = filePath.replace(/:\s*/g, "/");
filePath = "/storage/" + subUri;
return `file://${filePath}`
}
Есть ли более приятный способ получить реальный путь к файлу на SD-карте из его URI? Я ценю любую идею.
ОС: Андроид
Environment.getExternalStorageDirectory()
- person Vikas Acharya   schedule 10.02.2020