React Native [Android] URI с Google Диска w/'React-Native-Document-Picker' и 'response-native-get-real-path'

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.