88import android .provider .MediaStore ;
99import android .content .ContentUris ;
1010import android .os .Environment ;
11+ import android .content .ContentResolver ;
12+ import com .RNFetchBlob .RNFetchBlobUtils ;
13+ import java .io .File ;
14+ import java .io .InputStream ;
15+ import java .io .FileOutputStream ;
1116
1217public class PathResolver {
1318 public static String getRealPathFromURI (final Context context , final Uri uri ) {
@@ -59,6 +64,29 @@ else if (isMediaDocument(uri)) {
5964
6065 return getDataColumn (context , contentUri , selection , selectionArgs );
6166 }
67+ // Other Providers
68+ else {
69+ try {
70+ InputStream attachment = context .getContentResolver ().openInputStream (uri );
71+ if (attachment != null ) {
72+ String filename = getContentName (context .getContentResolver (), uri );
73+ if (filename != null ) {
74+ File file = new File (context .getCacheDir (), filename );
75+ FileOutputStream tmp = new FileOutputStream (file );
76+ byte [] buffer = new byte [1024 ];
77+ while (attachment .read (buffer ) > 0 ) {
78+ tmp .write (buffer );
79+ }
80+ tmp .close ();
81+ attachment .close ();
82+ return file .getAbsolutePath ();
83+ }
84+ }
85+ } catch (Exception e ) {
86+ RNFetchBlobUtils .emitWarningEvent (e .toString ());
87+ return null ;
88+ }
89+ }
6290 }
6391 // MediaStore (and general)
6492 else if ("content" .equalsIgnoreCase (uri .getScheme ())) {
@@ -77,6 +105,18 @@ else if ("file".equalsIgnoreCase(uri.getScheme())) {
77105 return null ;
78106 }
79107
108+ private static String getContentName (ContentResolver resolver , Uri uri ) {
109+ Cursor cursor = resolver .query (uri , null , null , null , null );
110+ cursor .moveToFirst ();
111+ int nameIndex = cursor .getColumnIndex (MediaStore .MediaColumns .DISPLAY_NAME );
112+ if (nameIndex >= 0 ) {
113+ String name = cursor .getString (nameIndex );
114+ cursor .close ();
115+ return name ;
116+ }
117+ return null ;
118+ }
119+
80120 /**
81121 * Get the value of the data column for this Uri. This is useful for
82122 * MediaStore Uris, and other file-based ContentProviders.
0 commit comments