【问题标题】:React Native [Android] URI from Google Drive w/ 'React-Native-Document-Picker' & 'react-native-get-real-path'来自 Google Drive 的 React Native [Android] URI w/ 'React-Native-Document-Picker' & 'react-native-get-real-path'
【发布时间】:2018-10-06 10:09:40
【问题描述】:

React Native [Android]

三星手机

图书馆:

  • react-native-document-picker [返回我们的 URI]
  • react-native-get-real-path [将 URI 转换为真实路径]

能够:

  • 从本地文件获取 URI 并获取包含图片的真实路径
  • 当我选择文件时能够从 Google Drive 获取 URI

无法:

  • 将 Google Drive URI 转换为真实路径

    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

【问题讨论】:

  • 你有什么运气吗?
  • 很遗憾我没有。仍在等待任何建议。适用于 IOS,但不适用于 Android。

标签: react-native uri react-native-android


【解决方案1】:

修复了获取 Google Drive 文件绝对路径的错误。

所以事实证明,我们无法直接从选择 Google Drive File 返回的URI 中获取绝对路径。因此,我们需要应用某种 hack 来解决问题。

我所做的是,我将 react-native-get-real-path 存储库分叉为我们自己的,然后在 GRP.java 文件中更改了一些内容。

我基本上从获得的谷歌驱动器文件的URI 创建了InputStream,然后使用该流将文件复制到应用程序的缓存目录中并返回该文件的绝对路径,瞧。

这里是解决方案的代码sn-p:

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。

【讨论】:

    猜你喜欢
    • 2022-11-19
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2022-11-30
    • 2021-10-20
    • 2020-01-17
    相关资源
    最近更新 更多