2016-03-28 296 views
2

我试图从cameraRoll上传图片。事情是cameraRoll组件返回content:// URI而不是实际的文件路径。为了上传图片我需要一个文件路径,有什么办法将content:// URI转换为文件URI吗?谢谢将React-Native转换为Android的实际路径内容:// URI为实际路径

+0

为什么你需要一条路径?你不能使用'InputStream'吗? – pskink

+0

我正在开发一个React-Native应用程序,并且使用Java方法有点麻烦,所以我正在寻找一个反应原生解决方案。谢谢 – cubbuk

回答

6

我把提交@Madhukar Hebbar功能,使它成为一个阵营本地节点模块。

你可以在这里找到: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) 
) 
) 
+0

你是救世主!只有一个问题 - 因为它只适用于android - 需要将require包行放入平台检查逻辑中。然而,与它提供的效用相比 - 我可以忽略这一点。 :-) –

+0

我已经使用过你的图书馆,但没有成功。我收到一个错误,“undefined不是一个函数(reactNativeGetRealPath2.default.getRealPathFromUri(path))',我给的路径是content://com.google.android.apps.photos.contentprovider/-1/1 /内容%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F890/ORIGINAL/NONE/225703422' –

0

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; 
    }