user7805408
user7805408

Reputation:

How to upload user's Google account photo to Firebase storage directly?

For my android app "Locally" I'm setting up Google sign. However, while retrieving the user's profile picture from his google account and uploading it to firebase storage I am getting the error displayed below.

Code for uploading the image:


  Uri imagePath=Uri.fromFile(newFile(Objects.requireNonNull(account.getPhotoUrl()).toString())); //account holds google signed in user.
  StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("profile_pic").child(firebaseAuth.getUid() + ".jpg"); //The picture is stored in Firebase storage inside profile_pic under the name UID.jpg
  UploadTask uploadTask = storageReference.putFile(imagePath);

Error is:

    2019-11-08 02:23:13.471 24564-24564/com.example.locally W/UploadTask: could not retrieve file size for upload file:///https%3A/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ%3Ds96-c
    java.io.FileNotFoundException: No such file or directory
        at android.os.Parcel.openFileDescriptor(Native Method)
        at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:283)
        at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:200)
        at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:992)
        at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:850)
        at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:804)
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@18.1.1:120)
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@18.1.1:263)
        at com.example.locally.MainActivity.sendUserData(MainActivity.java:308)
        at com.example.locally.MainActivity.access$600(MainActivity.java:45)
        at com.example.locally.MainActivity$6.onComplete(MainActivity.java:290)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
2019-11-08 02:23:13.472 24564-24564/com.example.locally E/StorageException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
    java.io.FileNotFoundException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at java.io.FileInputStream.<init>(FileInputStream.java:99)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:715)
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@18.1.1:133)
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@18.1.1:263)
        at com.example.locally.MainActivity.sendUserData(MainActivity.java:308)
        at com.example.locally.MainActivity.access$600(MainActivity.java:45)
        at com.example.locally.MainActivity$6.onComplete(MainActivity.java:290)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
2019-11-08 02:23:13.474 24564-24564/com.example.locally I/MainActivity: Path to storage reference is :/profile_pic/xyF6h4jiPmXfKHR2huoUPqb0BJL2.jpg
2019-11-08 02:23:13.474 24564-25065/com.example.locally E/StorageException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
    java.io.FileNotFoundException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at java.io.FileInputStream.<init>(FileInputStream.java:99)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:715)
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@18.1.1:133)
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@18.1.1:263)
        at com.example.locally.MainActivity.sendUserData(MainActivity.java:308)
        at com.example.locally.MainActivity.access$600(MainActivity.java:45)
        at com.example.locally.MainActivity$6.onComplete(MainActivity.java:290)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
2019-11-08 02:23:13.475 24564-25065/com.example.locally E/StorageException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
    java.io.FileNotFoundException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at java.io.FileInputStream.<init>(FileInputStream.java:99)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:715)
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@18.1.1:133)
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@18.1.1:263)
        at com.example.locally.MainActivity.sendUserData(MainActivity.java:308)
        at com.example.locally.MainActivity.access$600(MainActivity.java:45)
        at com.example.locally.MainActivity$6.onComplete(MainActivity.java:290)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
2019-11-08 02:23:13.476 24564-25065/com.example.locally E/StorageException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
    java.io.FileNotFoundException: /https:/lh3.googleusercontent.com/a-/AAuE7mCsY-OdcDUxIVOR53uN3waXR0-OPD5P4EmGdvR_AQ=s96-c (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at java.io.FileInputStream.<init>(FileInputStream.java:99)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:715)
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@18.1.1:133)
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@18.1.1:263)
        at com.example.locally.MainActivity.sendUserData(MainActivity.java:308)
        at com.example.locally.MainActivity.access$600(MainActivity.java:45)
        at com.example.locally.MainActivity$6.onComplete(MainActivity.java:290)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

error is at line:

    UploadTask uploadTask = storageReference.putFile(imagePath);

I just want to store profile picture of user of his google account to firebase storage inside profile_pic folder.

Upvotes: 0

Views: 82

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598740

You can upload files to Cloud Storage with the Firebase SDK in 3 ways:

  1. from data in memory
  2. from a stream
  3. from a local file

There is no way to upload from a (non-local) URL. So you'll first have to download the file, and then upload it to Cloud Storage.

Upvotes: 2

Related Questions