2017-04-13 39 views
0

我尝试存储将文件上传到Firebase存储后获得的Firebase存储URL,但出于我无法理解的原因,我无法写入Storage onSuccess侦听器内Firebase数据库上的某个位置。任何想法为什么?如果这不是存储上传文件的URL位置的正确方法,那么是什么?无法在Firebase存储onSuccess侦听器中写入Firebase数据库

我似乎无法找到一个这样的例子。这是为Android。 谢谢

+0

你可以张贴一些代码? – wnieves19

+1

我一直在数据库中存储文件的下载URL(和其他元数据)。所以它必须是特定于您的使用情况。没有看到[重现问题的最小代码](http://stackoverflow.com/help/mcve)(阅读链接,这很有用),这将很难说更多。 –

+1

感谢您的快速回复。我回家后肯定会在今天晚上提供一些代码。 – Sethsmagic

回答

0

你所要完成的是完全可行的,这里有一个例子

StorageReference fileRef = ....; 
    Uri fileUri = ....; 
    UploadTask uploadTask = fileRef.putFile(fileUri); 

    uploadTask.addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception exception) { 
      // Handle unsuccessful uploads 
      Log.d("TAG", "onFailure: " + exception); 

     } 
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
     // This is the URL you are looking for, here you should insert it into your db instance...Something like this 
     Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

     DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference(); 
     dbRef.child("uploadUrls").child("url1").setValue(downloadUrl.toString()); 
     } 
    }); 

我希望这有助于

+1

嗨Wnieves19,这是有帮助的。在看到你的评论和Frank van Puffelen确认我想要做的事情是可能的之后,我做了更多的挖掘并发现了这个问题(至少我认为我是这么做的)。我试图将Uri存储为一个uri而不是一个字符串。当我试图将我的对象存储到数据库时,它会导致一个计算器!我试图将其更改为一个字符串,它似乎工作正常。 – Sethsmagic

+1

然而,Firebase允许存储用户照片网址(我可以使用user.getPhotoUrl()进行检索),而且我可以将这些网址存储为Uri的网址,但不能将其存储为Firebase存储的URI 。我唯一的猜测就是Uri的Firebase存储时间要长得多,因此这个问题。如果你们中的任何一位能够对这个问题有更深入的了解,那将是非常棒的,但是我非常感谢帮助,谢谢! – Sethsmagic

+0

问题在于getPhotoUrl()方法返回一个Uri。关于您可以保存在实时数据库中的数据类型,请参阅读写数据文档: https://firebase.google.com/docs/database/android/read-and-write 希望这有助于 – wnieves19

0
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference(); 

uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
       Log.d("TAG", "onFailure: " + exception); 

      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
      // This is the URL you are looking for, here you should insert it into your db instance...Something like this 
      Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

      addData(downloadUrl.toString()); 

      } 
     }); 


public void addData(String downloadUrl) 
{ 

dbRef.child("uploadUrls").child("url1").setValue(downloadUrl); 

} 
相关问题