react native [Android]
三星手机
图书馆:
能够 :
无法:
DocumentPicker.show({filetype: [DocumentPickerUtil.allFiles()],},(error,res) => {
RNGRP.getRealPathFromURI(path).then(function(androidPath){
console.log('AndroidPath : ', androidPath);
})
}
我来自谷歌驱动器的 URI 是这样的:
content://com.google.android.apps.docs.storage/document/acc%3D2%3Bdoc%3D1
请您参考如下方法:
修复了获取 Google Drive 文件绝对路径的错误。
所以事实证明我们不能直接从URI
中得到绝对路径。已通过选择 Google Drive File 返回。因此,我们需要应用某种 hack 来解决问题。
我所做的是,我 fork 了 react-native-get-real-path
repo 到我们自己的,然后在 GRP.java
中更改了一些东西文件。
我基本上创建了 InputStream
从获得的谷歌驱动文件的 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 repository . https://github.com/Wraptime/react-native-get-real-path/pull/8的引用.