如何从Android应用程序检查Firebase存储中是否存在文件?

时间:2017-04-23 05:11:22

标签: android firebase firebase-storage

我正在开发用户单击图像的android应用程序,它存储在firebase中,云函数处理此图像并以文本文件的形式将输出存储在firebase中。为了在android中显示输出,应用程序会一直检查输出文件是否存在。如果是,则它在应用程序中显示输出。如果不是,我必须等待文件,直到它可用。

我无法找到任何文档来检查Firebase中是否存在任何文件。任何帮助或指示都会有所帮助。

感谢。

5 个答案:

答案 0 :(得分:6)

Firebase存储API的设置方式是用户只请求存在的文件。

因此,必须将不存在的文件作为错误处理:

您可以查看文档here

答案 1 :(得分:4)

您可以使用返回Promise的getDownloadURL,它可以用于捕获“未找到”错误,或者处理该文件(如果存在)。例如:

    storageRef.child("file.png").getDownloadURL().then(onResolve, onReject);

function onResolve(foundURL) { 
//stuff 
} 
function onReject(error){ 
//fill not found
console.log(error.code); 
}

<强>更新

这是另一种更简单,更清洁的解决方案。

storageRef.child("users/me/file.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        // Got the download URL for 'users/me/profile.png'
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // File not found
    }
});

答案 2 :(得分:1)

我的代码

 void getReferenceAndLoadNewBackground(String photoName) {
    final StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("Photos").child(photoName + ".png");
    storageReference.getDownloadUrl()
            .addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    loadBackground(storageReference);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    int errorCode = ((StorageException) exception).getErrorCode();
                    if (errorCode == StorageException.ERROR_OBJECT_NOT_FOUND) {
                        StorageReference storageReference2 = FirebaseStorage.getInstance().getReference().child("Photos").child("photo_1.png");
                        loadBackground(storageReference2);
                    }

                }
            });
}

答案 3 :(得分:0)

这是我当前检查文件是否存在的方式。

this.auth.user $拉取一个可观察对象,该对象显示FireStore数据库中当前用户的数据。 我将FileStorage配置文件映像参考存储在FireStore数据库中。

然后,我在用户数据中使用“文件路径”,并将其用作FileStorage参考。

现在使用可观察对象并检查downloadURL长度是否小于或等于0。

如果确实大于零,则文件存在;否则,文件不存在。然后去做点什么。还有其他事情。

ngOnInit() {
    this.userSubscription = this.auth.user$.subscribe((x) => {
    console.log(x);
    this.userUID = x.userId;
    this.userPhotoRef = x.appPhotoRef;
    this.userDownloadURL = x.appPhotoURL;
    });
    const storageRef = this.storage.ref(this.userPhotoRef);
    console.log(storageRef);
    if (storageRef.getDownloadURL.length <= 0) {
      console.log('File Does not Exist');
    } else {
      console.log('File Exists');
    }
  }

答案 4 :(得分:0)

如果您有完整的URL参考,以下内容对我有用

String url = "https://firebasestorage.googleapis.com/v0/b/******************"
StorageReference ref = FirebaseStorage.getInstance().getReferenceFromUrl(url);

ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        Log.d(LOG_TAG, "File exists");
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        Log.d(LOG_TAG, "File not exist");
    }
});