Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit e398e8c

Browse files
jsmwkh237
authored andcommitted
Android Feature: Handle Arbitrary Providers (#374)
* Update ISSUE_TEMPLATE * Handle Android content providers
1 parent 5378807 commit e398e8c

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

.github/ISSUE_TEMPLATE

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ You may want to take a look on that page or find issues tagged "trouble shooting
44
* please provide the version of installed library and RN project.
55
* a sample code snippet/repository is very helpful to spotting the problem.
66
* issues which have been tagged as 'needs feedback', will be closed after 2 weeks if receive no feedbacks.
7+
* issues lack of detailed information will be closed without any feedback

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)