2017-04-26 49 views
3

将文件上传到Firebase后,如何获取它的URL以便将其存储起来以备后用?我想将网址写入Firebase数据库,以便其他用户可以访问该图像。如何在将文件上传到Firebase后获取文件的URL?

我上传文件,像这样:

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

我已经证实,这些文件其实都是上传所以现在我只需要我可以写我的数据库的URL。然而,当我试图做到这一点:

Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); 

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

我不知道这意味着什么,我也不知道我为什么会得到这个错误意识我正在关注Firebase提供的this example

有没有获取URL的新方法?

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

+0

你应该写'taskSnapshot.getDownloadUrl()',而不是'taskSnapshot.getMetadata( ).getDownloadUrl()' –

+0

@AnggrayudiH我试过了,它给了我同样的错误信息。出于某种原因,它只是不会让我调用我的'addOnSuccessListener()'方法中的方法。 –

+0

关于你看到的错误,你见过[这篇文章](http://stackoverflow.com/q/41105586/4625829)? –

回答

0

你试过taskSnapshot.getDownloadUrl()? 如果这也不起作用,你可以通过mstorageRef.child("folder").child(filename).toString()

+0

我试过'taskSnapshot.getDownloadUrl()',但它给出了同样的错误。另外,我将如何使用您向我展示的另一种方法?另外,其他方法对我来说会怎样?我将如何获取文件? –

+0

Url只是firebase的路径,图片存储在上传成功后,您应该知道存储上正在创建一个路径,因此请使用您保存的相同存储引用o并将其保存为字符串..在代码'filepath中。 toString()' – amar

+0

这很有道理。但是如果我在另一项活动中想要访问该图片,我该怎么做?由于我无法访问'mstorageRef',我将如何访问图像? –

0

获得成功听者图像位置试试这个:

final Uri uri = data.getData(); 

StorageReference filepath = mStorageRef.child("folder").child(filename); 
filepath.putFile(uri).addOnSuccessListener(new 

OnSuccessListener<UploadTask.TaskSnapshot>() { 

     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

      Uri downloadUri = taskSnapshot.getDownloadUrl(); 
      //Getting url where image is stored 
      //downloadUri will store image URI 
     } 
    }); 
相关问题