React Native [Android] URI с Google Диска с «React-Native-Document-Picker» и «response-native-get-real-path» - PullRequest
0 голосов
/ 25 апреля 2018

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 Drive выглядит так:

content://com.google.android.apps.docs.storage/document/acc%3D2%3Bdoc%3D1

1 Ответ

0 голосов
/ 15 сентября 2018

Исправлена ​​ошибка получения абсолютного пути к файлу Google Drive.

Получается, что мы не можем напрямую получить абсолютный путь из URI, который был возвращен при выборе Google Drive File.Следовательно, нам нужно применить какой-то взлом, чтобы решить эту проблему.

Что я сделал, я раздвоил репо react-native-get-real-path в наше собственное, а затем изменил несколько вещей в файле GRP.java.

Я в основном создал InputStream из полученного файла диска Google URI, а затем, используя этот поток, скопировал файл в каталог кэша приложения и возвратил абсолютный путь к этому файлу и вуаля.

Вотфрагмент кода для решения:

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.

...