【问题标题】:How to upload user's Google account photo to Firebase storage directly?如何将用户的 Google 帐户照片直接上传到 Firebase 存储?
【发布时间】:2020-03-04 12:45:39
【问题描述】:

对于我的 Android 应用程序“本地”,我正在设置 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 存储中。

【问题讨论】:

    标签: java android firebase google-signin


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 2019-04-18
      • 1970-01-01
      • 2021-05-30
      • 2021-06-30
      • 2018-12-29
      • 1970-01-01
      • 2017-06-16
      • 2017-04-14
      相关资源
      最近更新 更多