【问题标题】:React Native - Get file name from android content uriReact Native - 从 android 内容 uri 获取文件名
【发布时间】:2020-02-11 12:28:40
【问题描述】:


我需要从 android 内容 uri 中获取文件名,例如:
内容://com.android.providers.downloads.documents/document/15

我尝试使用 react-native-fs stat 但它返回“文件不存在”的错误。

我该怎么做?

【问题讨论】:

  • 那不是文件。在标准 Java/Kotlin Android 中,您可以使用DocumentFile.fromSingleUri()getName() 函数来获取与Uri 标识的内容相关联的“显示名称”。我不知道是否有人为此创建了 React Native 包装器。
  • 在 java 中,您可以像 getContentResolver().query(uri) 一样查询 DISPLAY_NAME 的内容解析器,然后将返回的游标用于 DISPLAY_NAME 列。请翻译成 react-native。

标签: android reactjs react-native react-native-android react-native-fs


【解决方案1】:

我在 react native 中没有找到纯解决方案,所以我在 android 中创建了原生包,并在 react native 中创建了模块,以便我可以使用它。
这是android代码:

@ReactMethod
    public void getFileNameFromUri(String filepath, Promise promise) {
        Uri uri = Uri.parse(filepath);
        String fileName = "";

        if (uri.getScheme().equals("content")) {
            try {
                Cursor cursor = reactContext.getContentResolver().query(uri, null, null, null, null);

                if (cursor.moveToFirst()) {
                    fileName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                    Log.d("FS", "Real File name: " + fileName);
                }
                cursor.close();
                promise.resolve(fileName);
            } catch (IllegalArgumentException ignored) {
                promise.reject("1", "Can not get cursor");
            }
        } else {
            promise.resolve(fileName);
        }
    }

这是如何从 android 本机代码中对本机进行反应: react-native-modules-android

【讨论】:

  • 太好了。我个人的目标是找到为支持 Android 和 iOS 的 react-native 构建的解决方案。你试过github.com/joltup/rn-fetch-blob 吗?也是使用 rn-fetch-blob stackoverflow.com/questions/54743482/… 的 stackoverflow 答案
  • @Alex 不,但我读过它,它像 reat-native-fs 一样工作来获取文件的真实路径。就像我理解的那样,没有办法在 android 中获取真实的文件路径。在IOS中也很容易获取文件名,因为你用file://获取真实的文件路径,所以只需要从路径中剪切文件名。
猜你喜欢
  • 2023-03-09
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
相关资源
最近更新 更多