使用 React-Native 将 content:// URI 转换为 Android 的实际路径
Convert content:// URI to actual path for Android using React-Native
我正在尝试从 cameraRoll
上传图片。事情是 cameraRoll
组件 returns content:// URI 而不是实际的文件路径。为了上传图片我需要一个文件路径,有什么办法可以将 content:// URI 转换为文件 URI?谢谢
将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;
}
我把 @Madhukar Hebbar 提交的函数做了一个 React Native Node 模块。
您可以在这里找到它: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)
)
)
您可以使用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
了
我正在尝试从 cameraRoll
上传图片。事情是 cameraRoll
组件 returns content:// URI 而不是实际的文件路径。为了上传图片我需要一个文件路径,有什么办法可以将 content:// URI 转换为文件 URI?谢谢
将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;
}
我把 @Madhukar Hebbar 提交的函数做了一个 React Native Node 模块。
您可以在这里找到它: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)
)
)
您可以使用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
了