如何在将文件上传到Firebase后获取文件URL?

Isa*_*nse 15 android firebase firebase-storage

将文件上传到Firebase后,如何获取该URL,以便将其存储以供日后使用?我想将URL写入Firebase数据库,以便其他用户可以访问该图像.

我正在上传文件:

public void uploadFile()
{

    StorageReference filepath = mstorageRef.child("folder").child(filename);

    Uri File= Uri.fromFile(new File(mFileName));

    filepath.putFile(File).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
        {
            Toast.makeText(MtActivity.this, "Upload Done", Toast.LENGTH_LONG).show();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我已经确认文件实际上是上传的,所以现在我只需要我可以写入数据库的URL.但是,当我尝试这样做时:

Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl();
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误并说 This method should only be accessed from tests or within private scope

我不确定这意味着什么,我也不知道为什么我会得到这个错误,因为我正在按照Firebase提供的这个例子.

是否有获取URL的新方法?

此外,该特定于该项目的URL是否是唯一的?这意味着如果我将它存储到数据库并尝试以后访问它,我能够这样做吗?

Ana*_*nth 29

您正在使用UploadTask.getDownloadUrl()哪个已弃用.您可以使用StorageReference.getDownloadUrl().

在你的情况下你可以试试这个 -

 filepath.putFile(File).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
    {
         filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        Uri downloadUrl = uri;
                       //Do what you want with the url
                    }
        Toast.makeText(MtActivity.this, "Upload Done", Toast.LENGTH_LONG).show();
    }
});
Run Code Online (Sandbox Code Playgroud)

注意StorageReference.getDownloadUrl()返回Task,必须异步处理,你不能做Uri downloadUrl = photoRef.getDownloadUrl().getResult();其他事情java.lang.IllegalStateException: Task is not yet complete


ama*_*mar -1

你试过了吗 taskSnapshot.getDownloadUrl()?如果这也不起作用,您可以通过以下方式在成功侦听器中获取图像位置mstorageRef.child("folder").child(filename).toString()