8
8
import android .provider .MediaStore ;
9
9
import android .content .ContentUris ;
10
10
import 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 ;
11
16
12
17
public class PathResolver {
13
18
public static String getRealPathFromURI (final Context context , final Uri uri ) {
@@ -59,6 +64,29 @@ else if (isMediaDocument(uri)) {
59
64
60
65
return getDataColumn (context , contentUri , selection , selectionArgs );
61
66
}
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
+ }
62
90
}
63
91
// MediaStore (and general)
64
92
else if ("content" .equalsIgnoreCase (uri .getScheme ())) {
@@ -77,6 +105,18 @@ else if ("file".equalsIgnoreCase(uri.getScheme())) {
77
105
return null ;
78
106
}
79
107
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
+
80
120
/**
81
121
* Get the value of the data column for this Uri. This is useful for
82
122
* MediaStore Uris, and other file-based ContentProviders.
0 commit comments