Skip to content

Commit 7626552

Browse files
committed
Handle Android content providers
1 parent fd9f20d commit 7626552

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

android/src/main/java/com/RNFetchBlob/Utils/PathResolver.java

+40
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
import android.provider.MediaStore;
99
import android.content.ContentUris;
1010
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;
1116

1217
public 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

Comments
 (0)