diff --git a/android/androidfiledialog.cpp b/android/androidfiledialog.cpp
index 94fbc0b1a581b3e04b62ed2e4f13243ad9f9be1f..140a19163c922b9e2bbc13e88db9f98ccbe37524 100755
--- a/android/androidfiledialog.cpp
+++ b/android/androidfiledialog.cpp
@@ -40,15 +40,25 @@ void AndroidFileDialog::ResultReceiver::handleActivityResult( int receiverReques
 QString AndroidFileDialog::ResultReceiver::uriToPath( const QAndroidJniObject &uri )
 {
     QAndroidJniEnvironment env;
-
+    QString path = uri.callObjectMethod( "getPath", "()Ljava/lang/String;" ).toString();
     if ( uri.toString().startsWith( "file:", Qt::CaseInsensitive ) ) {
         return uri.callObjectMethod( "getPath", "()Ljava/lang/String;" ).toString();
     }
-
+    QAndroidJniObject data = QAndroidJniObject::callStaticObjectMethod("com/osalliance/rocketchatMobile/MainActivity",
+        "uriToData",
+        "(Ljava/lang/String;)[B", QAndroidJniObject::fromString(uri.toString()).object<jstring>());
+    qDebug() << "opening uri "<<uri.toString();
     QAndroidJniObject contentResolver = QtAndroid::androidActivity().callObjectMethod( "getContentResolver", "()Landroid/content/ContentResolver;" );
     QAndroidJniObject cursor = contentResolver.callObjectMethod( "query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;", uri.object<jobject>(), 0, 0, 0, 0 );
-    QAndroidJniObject DATA = QAndroidJniObject::fromString( "_data" );
+    QAndroidJniObject DATA = QAndroidJniObject::fromString( "_display_name" );
     jint columnIndex = cursor.callMethod<jint>( "getColumnIndexOrThrow", "(Ljava/lang/String;)I", DATA.object<jstring>() );
+    jbyteArray dataArray = data.object<jbyteArray>();
+    jsize iconSize = env->GetArrayLength(dataArray);
+    jbyte *realdata = env->GetByteArrayElements(dataArray, JNI_FALSE);
+    QString cache = QStandardPaths::writableLocation( QStandardPaths::TempLocation );
+    QDir cacheDir(cache);
+    QUuid id = QUuid::createUuid();
+
 
     if ( env->ExceptionCheck() ) {
         qWarning() << "Fileupload: JAVA exception: ";
@@ -59,9 +69,18 @@ QString AndroidFileDialog::ResultReceiver::uriToPath( const QAndroidJniObject &u
 
     cursor.callMethod<jboolean>( "moveToFirst", "()Z" );
     QAndroidJniObject result = cursor.callObjectMethod( "getString", "(I)Ljava/lang/String;", columnIndex );
-
-    return result.isValid() ? result.toString() : QString( "null" );
-
+            QString displayName =  result.isValid() ? result.toString() : QString( "null" );
+            QString cacheFile = cacheDir.filePath(displayName);
+            qDebug() <<"cachefile: " << cacheFile;
+            QFile file(cacheFile);
+            if(realdata != nullptr){
+                if(file.open(QIODevice::WriteOnly)){
+                    file.write((const char*)realdata,iconSize);
+                }
+                qDebug() <<"wrote file " << cacheFile;
+                return cacheFile;
+            }
+            return QString( "null" );
 }
 
 AndroidFileDialog::AndroidFileDialog( QObject *parent ) : QObject( parent )
diff --git a/android/androidfiledialog.h b/android/androidfiledialog.h
index f1ae0c91b69f8a61e63db7d84ac931950aefc16d..dd5a322dc6dc29a1f0c7e5feb1440b274edfcffb 100755
--- a/android/androidfiledialog.h
+++ b/android/androidfiledialog.h
@@ -26,6 +26,9 @@
 #include <QtAndroid>
 #include <QAndroidActivityResultReceiver>
 #include <QAndroidJniEnvironment>
+#include <QStandardPaths>
+#include <QDir>
+#include <QUuid>
 
 class AndroidFileDialog : public QObject
 {