如何将用户的Google帐户照片直接上传到Firebase存储?

时间:2019-11-07 21:29:05

标签: java android firebase google-signin

对于我的Android应用“本地”,我正在设置Google Sign。但是,在从他的Google帐户中检索用户的个人资料图片并将其上传到Firebase存储时,出现以下错误。

用于上传图片的代码:


  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);

错误是:

    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)

错误在一行:

    UploadTask uploadTask = storageReference.putFile(imagePath);

我只想将其Google帐户用户的个人资料图片存储到profile_pic文件夹内的Firebase存储中。

1 个答案:

答案 0 :(得分:1)

您可以通过以下三种方式使用Firebase SDK将文件上传到Cloud Storage:

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

无法从(非本地)URL上传。因此,您首先必须下载文件,然后将其上传到Cloud Storage。