14

我正在尝试从cameraRoll. 事情是cameraRoll组件返回 content:// URI 而不是实际的文件路径。为了上传图片我需要一个文件路径,有没有办法将 content:// URI 转换为文件 URI?谢谢

4

3 回答 3

11

我把@Madhukar Hebbar提交的函数做成了一个React Native Node Module。

你可以在这里找到它:react-native-get-real-path

因此,要实现您想要的,您可以将上述模块与react-native-fs结合使用

然后,当您想从相机胶卷上传所选图像时,您可以执行以下操作:

RNGRP.getRealPathFromURI(this.state.selectedImageUri).then(path =>
  RNFS.readFile(path, 'base64').then(imageBase64 =>
    this.props.actions.sendImageAsBase64(imageBase64)
  )
)
于 2016-06-22T21:52:42.000 回答
7

您可以使用react-native-fs'copyFile方法将内容 uri 转换为文件 uri。

if (url.startsWith('content://')) {
    const urlComponents = url.split('/')
    const fileNameAndExtension = urlComponents[urlComponents.length - 1]
    const destPath = `${RNFS.TemporaryDirectoryPath}/${fileNameAndExtension}`
    await RNFS.copyFile(url, destPath)
}

然后你可以'file://' + destPath按预期使用

于 2020-07-01T13:04:20.800 回答
2

传递 content:// URI到下面的方法以获取文件路径作为字符串,然后使用文件对象进行任何操作。

File file = new File(getURIPath(uriValue));

/**
 * URI Value
 * @return File Path.
 */
String getURIPath(Uri uriValue) 
    {
        String[] mediaStoreProjection = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(uriValue, mediaStoreProjection, null, null, null);
        if (cursor != null){ 
        int colIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String colIndexString=cursor.getString(colIndex);
        cursor.close();
        return colIndexString;
        }
        return null;
    }
于 2016-03-28T09:33:39.730 回答