How to downlaod file from google drive and display in image in android

Viewed 187

This is my following code.

I'm having a issue display image from Google Drive.

Source code from https://www.section.io/engineering-education/backup-services-with-google-drive-api-in-android/

I have also worked with this image url https://drive.google.com/uc?id=FILE_ID but only worked in anyone with the link access not restricted images.

fun downloadFileFromGDrive(id: String) {
    getDriveService()?.let { googleDriveService ->
        CoroutineScope(Dispatchers.IO).launch {

            val gDriveFile = googleDriveService.Files().get(id).execute()
            Log.e("gDriveFile", gDriveFile.toString())

           val outputStream: OutputStream = ByteArrayOutputStream()
            googleDriveService.files()[id].executeMediaAndDownloadTo(outputStream)

        }
    } ?: Toast.makeText(context, "Please Log In first!", LENGTH_SHORT).show()
}
1 Answers

Use the following function It will download Google drive Image and save it to the app private files folder.

 fun downloadFileFromGDrive(id: String) {
        getDriveService()?.let { googleDriveService ->
            CoroutineScope(Dispatchers.IO).launch {
                Log.e("idDownload", id)
                val file = File(context.filesDir, "${id}.jpg")
                if (!file.exists()) {
                    try {
                        val gDriveFile = googleDriveService.Files().get(id).execute()
                        saveImageInFilesDir(gDriveFile.id)
                    } catch (e: Exception) {
                        println("!!! Handle Exception $e")
                    }
                }
            }
        } ?: ""
    }


private fun saveImageInFilesDir(id: String?) {
    getDriveService()?.let { googleDriveService ->
        CoroutineScope(Dispatchers.IO).launch {
            val file = File(context.filesDir, "${id}.jpg")
            try {
                val outputStream = FileOutputStream(file)
                googleDriveService.files()[id]
                    .executeMediaAndDownloadTo(outputStream)
                if (id != null) {
                    googleDriveService.readFile(id)
                }
           
                outputStream.flush()
                outputStream.close()

            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

}
Related