React Native [Android]
Телефон Samsung
Библиотеки:
- response-native-document-picker [возвращает наш URI]
- response-native-get-real-path [преобразует URI в реальный путь]
Способен:
- Получить URI из локальных файлов и получить реальный путь, включая изображения
- Возможность получить URI с Google Диска при выборе файла
Не в состоянии:
-
Преобразование URI Google Диска в реальный путь
DocumentPicker.show({filetype: [DocumentPickerUtil.allFiles()],},(error,res) => {
RNGRP.getRealPathFromURI(path).then(function(androidPath){
console.log('AndroidPath : ', androidPath);
})
}
мой URI с диска Google выглядит так:
content://com.google.android.apps.docs.storage/document/acc%3D2%3Bdoc%3D1
Ответ 1
Исправлена ошибка, позволяющая получить абсолютный путь к файлу Google Диска.
Таким образом, оказывается, что мы не можем напрямую получить абсолютный путь от URI
, который был возвращен путем выбора файла Google Диска. Следовательно, нам нужно применить какой-то хак для решения проблемы.
То, что я сделал, это то, что я GRP.java
react-native-get-real-path
в наши собственные, а затем изменил несколько вещей в файле GRP.java
.
Я в основном создал InputStream
из полученного URI
файла диска Google, а затем, используя этот поток, скопировал файл в каталог кэша приложений и вернул абсолютный путь к этому файлу и voila.
Вот фрагмент кода для решения:
input = context.getContentResolver().openInputStream(uri);
/* save stream to temp file */
/* displayName is obtained from the URI */
File file = new File(context.getCacheDir(), displayName);
OutputStream output = new FileOutputStream(file);
byte[] buffer = new byte[4 * 1024]; // or other buffer size
int read;
while ((read = input.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
final String outputPath = file.getAbsolutePath();
return outputPath;
Вы можете клонировать репозиторий git. Ссылка https://github.com/Wraptime/react-native-get-real-path/pull/8.