2016-03-28 3 views
2

cameraRollから画像をアップロードしようとしています。実際のファイルパスではなくcontent:// URIを返すのはcameraRollコンポーネントです。画像をアップロードするにはファイルパスが必要ですが、コンテンツを変換する方法はありますか?// URIをファイルURIに変換しますか?ありがとうコンテンツ:// URIをリアクションネイティブを使用してAndroidの実際のパスに変換します

+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

あなたは救世主です!ただ1つの懸念 - アンドロイドのためだけに働くので - 必要なパッケージラインをプラットフォームチェックロジックの中に入れる必要があります。しかし、それが提供しているユーティリティと比較して - 私はこれを無視することができます。 :-) –

+0

私はあなたのライブラリを使用しましたが、動作しませんでした。 '未定義は関数ではない(reactNativeGetRealPath2.default.getRealPathFromUri(path))'というエラーが出て、私が与えるパスは 'content://com.google.android.apps.photos.contentprovider/-1/1 /コンテンツ%3A%2F%2Fメディア%2Fexternal%2Fimages%2Fメディア%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; 
    } 
関連する問題