22
33import android .util .Log ;
44import android .os .Environment ;
5- import android .content .Context ;
65
76import java .io .File ;
87import java .util .Map ;
1817import com .facebook .react .bridge .WritableMap ;
1918import com .facebook .react .bridge .ReactMethod ;
2019import com .facebook .react .bridge .ReadableMap ;
21- import com .facebook .react .bridge .ReactContext ;
2220import com .facebook .react .bridge .ReactApplicationContext ;
2321import com .facebook .react .bridge .ReactContextBaseJavaModule ;
2422
@@ -49,11 +47,8 @@ class Storage extends ReactContextBaseJavaModule {
4947 private static final String FileTypeRegular = "FILETYPE_REGULAR" ;
5048 private static final String FileTypeDirectory = "FILETYPE_DIRECTORY" ;
5149
52- private ReactContext mReactContext ;
53-
5450 public Storage (ReactApplicationContext reactContext ) {
5551 super (reactContext );
56- mReactContext = reactContext ;
5752
5853 Log .d (TAG , "New instance" );
5954 }
@@ -142,7 +137,13 @@ public void uploadFile(final String urlStr, final String name, final String file
142137 Log .i (TAG , "From file: " + filepath + " to " + urlStr + " with name " + name );
143138
144139 try {
145- Uri file = Uri .fromFile (new File (filepath ));
140+ Uri file ;
141+ if (filepath .startsWith ("content://" )) {
142+ String realPath = getRealPathFromURI (filepath );
143+ file = Uri .fromFile (new File (realPath ));
144+ } else {
145+ file = Uri .fromFile (new File (filepath ));
146+ }
146147
147148 StorageMetadata .Builder metadataBuilder = new StorageMetadata .Builder ();
148149 Map <String , Object > m = Utils .recursivelyDeconstructReadableMap (metadata );
@@ -190,7 +191,7 @@ public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
190191 WritableMap data = Arguments .createMap ();
191192 data .putString ("eventName" , "upload_progress" );
192193 data .putDouble ("progress" , progress );
193- Utils .sendEvent (mReactContext , "upload_progress" , data );
194+ Utils .sendEvent (getReactApplicationContext () , "upload_progress" , data );
194195 }
195196 }
196197 })
@@ -203,7 +204,7 @@ public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
203204 WritableMap data = Arguments .createMap ();
204205 data .putString ("eventName" , "upload_paused" );
205206 data .putString ("ref" , bucket );
206- Utils .sendEvent (mReactContext , "upload_paused" , data );
207+ Utils .sendEvent (getReactApplicationContext () , "upload_paused" , data );
207208 }
208209 });
209210 } catch (Exception ex ) {
@@ -214,21 +215,29 @@ public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
214215 @ ReactMethod
215216 public void getRealPathFromURI (final String uri , final Callback callback ) {
216217 try {
217- Context context = getReactApplicationContext ();
218- String [] proj = {MediaStore .Images .Media .DATA };
219- Cursor cursor = context .getContentResolver ().query (Uri .parse (uri ), proj , null , null , null );
220- int column_index = cursor .getColumnIndexOrThrow (MediaStore .Images .Media .DATA );
221- cursor .moveToFirst ();
222- String path = cursor .getString (column_index );
223- cursor .close ();
224-
218+ String path = getRealPathFromURI (uri );
225219 callback .invoke (null , path );
226220 } catch (Exception ex ) {
227221 ex .printStackTrace ();
228222 callback .invoke (makeErrorPayload (1 , ex ));
229223 }
230224 }
231225
226+ private String getRealPathFromURI (final String uri ) {
227+ Cursor cursor = null ;
228+ try {
229+ String [] proj = {MediaStore .Images .Media .DATA };
230+ cursor = getReactApplicationContext ().getContentResolver ().query (Uri .parse (uri ), proj , null , null , null );
231+ int column_index = cursor .getColumnIndexOrThrow (MediaStore .Images .Media .DATA );
232+ cursor .moveToFirst ();
233+ return cursor .getString (column_index );
234+ } finally {
235+ if (cursor != null ) {
236+ cursor .close ();
237+ }
238+ }
239+ }
240+
232241 private WritableMap getDownloadData (final UploadTask .TaskSnapshot taskSnapshot ) {
233242 Uri downloadUrl = taskSnapshot .getDownloadUrl ();
234243 StorageMetadata d = taskSnapshot .getMetadata ();
0 commit comments