diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java
index 8e59033..2a2bf3b 100644
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java
@@ -21,6 +21,7 @@ import android.provider.OpenableColumns;
 import android.util.Base64;
 import android.webkit.MimeTypeMap;
 
+import androidx.annotation.NonNull;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.FileProvider;
 import androidx.exifinterface.media.ExifInterface;
@@ -36,6 +37,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -383,7 +385,7 @@ public class Utils {
         return fileUris;
     }
 
-    static ReadableMap getImageResponseMap(Uri uri, Options options, Context context) {
+    static WritableMap getImageResponseMap(Uri uri, Options options, Context context) {
         String fileName = uri.getLastPathSegment();
         int[] dimensions = getImageDimensions(uri, context);
 
@@ -418,13 +420,16 @@ public class Utils {
 
         for(int i = 0; i < fileUris.size(); ++i) {
             Uri uri = fileUris.get(i);
+            String fileName = getNameFromURI(context,uri);
 
             if (isImageType(uri, context)) {
                 if (uri.getScheme().contains("content")) {
                     uri = getAppSpecificStorageUri(uri, context);
                 }
                 uri = resizeImage(uri, context, options);
-                assets.pushMap(getImageResponseMap(uri, options, context));
+                WritableMap resMap = getImageResponseMap(uri, options, context);
+                resMap.putString("originalFileName",fileName);
+                assets.pushMap(resMap);
             } else if (isVideoType(uri, context)) {
                 assets.pushMap(getVideoResponseMap(uri, context));
             } else {
@@ -438,6 +443,31 @@ public class Utils {
         return response;
     }
 
+    /**
+     * Return file name from Uri given.
+     * @param context the context, cannot be null.
+     * @param uri uri request for file name, cannot be null
+     * @return the corresponding display name for file defined in uri or null if error occurs.
+     */
+    static String getNameFromURI(@NonNull Context context, @NonNull Uri uri) {
+        String result = null;
+        Cursor c = null;
+        try {
+            c = context.getContentResolver().query(uri, null, null, null, null);
+            c.moveToFirst();
+            result = c.getString(c.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+        }
+        catch (Exception e){
+            // error occurs
+        }
+        finally {
+            if(c != null){
+                c.close();
+            }
+        }
+        return result;
+    }
+
     static ReadableMap getErrorMap(String errCode, String errMsg) {
         WritableMap map = Arguments.createMap();
         map.putString("errorCode", errCode);
diff --git a/node_modules/react-native-image-picker/ios/ImagePickerManager.m b/node_modules/react-native-image-picker/ios/ImagePickerManager.m
index b634ffb..18b8950 100644
--- a/node_modules/react-native-image-picker/ios/ImagePickerManager.m
+++ b/node_modules/react-native-image-picker/ios/ImagePickerManager.m
@@ -96,6 +96,39 @@ RCT_EXPORT_METHOD(launchImageLibrary:(NSDictionary *)options callback:(RCTRespon
     });
 }
 
+-(NSString *)cachesDirectoryName
+{
+    static NSString *cachePath = nil;
+    if(!cachePath) {
+        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
+        cachePath = [paths objectAtIndex:0];
+    }
+    
+    return cachePath;
+}
+
+///
+/// Builds paths for identifiers in the cache directory
+///
+-(NSString *)pathForName:(NSString *)name
+{
+    NSString *cachePath = [self cachesDirectoryName];
+    NSString *path = [cachePath stringByAppendingPathComponent:name];
+    return path;
+}
+
+#pragma mark - NSData Cache methods
+
+///
+/// Saves the given data to the cache directory
+///
+-(NSString *)saveToCacheDirectory:(NSData *)data withName:(NSString *)name
+{
+    NSString *path = [self pathForName:name];
+    [data writeToFile:path atomically:YES];
+    return path;
+}
+
 #pragma mark - Helpers
 
 -(NSMutableDictionary *)mapImageToAsset:(UIImage *)image data:(NSData *)data {
@@ -121,22 +154,14 @@ RCT_EXPORT_METHOD(launchImageLibrary:(NSDictionary *)options callback:(RCTRespon
     asset[@"type"] = [@"image/" stringByAppendingString:fileType];
 
     NSString *fileName = [self getImageFileName:fileType];
-    NSString *path = [[NSTemporaryDirectory() stringByStandardizingPath] stringByAppendingPathComponent:fileName];
-    [data writeToFile:path atomically:YES];
+    NSString *path = [self saveToCacheDirectory:data withName:fileName];
 
     if ([self.options[@"includeBase64"] boolValue]) {
         asset[@"base64"] = [data base64EncodedStringWithOptions:0];
     }
 
-    NSURL *fileURL = [NSURL fileURLWithPath:path];
-    asset[@"uri"] = [fileURL absoluteString];
-
-    NSNumber *fileSizeValue = nil;
-    NSError *fileSizeError = nil;
-    [fileURL getResourceValue:&fileSizeValue forKey:NSURLFileSizeKey error:&fileSizeError];
-    if (fileSizeValue){
-        asset[@"fileSize"] = fileSizeValue;
-    }
+    asset[@"uri"] = path;
+    asset[@"fileSize"] = [NSNumber numberWithInteger:[data length]];
 
     asset[@"fileName"] = fileName;
     asset[@"width"] = @(image.size.width);
