我尝试存储将文件上传到Firebase存储后获得的Firebase存储URL,但出于我无法理解的原因,我无法写入Storage onSuccess侦听器内Firebase数据库上的某个位置。任何想法为什么?如果这不是存储上传文件的URL位置的正确方法,那么是什么?无法在Firebase存储onSuccess侦听器中写入Firebase数据库
我似乎无法找到一个这样的例子。这是为Android。 谢谢
我尝试存储将文件上传到Firebase存储后获得的Firebase存储URL,但出于我无法理解的原因,我无法写入Storage onSuccess侦听器内Firebase数据库上的某个位置。任何想法为什么?如果这不是存储上传文件的URL位置的正确方法,那么是什么?无法在Firebase存储onSuccess侦听器中写入Firebase数据库
我似乎无法找到一个这样的例子。这是为Android。 谢谢
你所要完成的是完全可行的,这里有一个例子
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());
}
});
我希望这有助于
嗨Wnieves19,这是有帮助的。在看到你的评论和Frank van Puffelen确认我想要做的事情是可能的之后,我做了更多的挖掘并发现了这个问题(至少我认为我是这么做的)。我试图将Uri存储为一个uri而不是一个字符串。当我试图将我的对象存储到数据库时,它会导致一个计算器!我试图将其更改为一个字符串,它似乎工作正常。 – Sethsmagic
然而,Firebase允许存储用户照片网址(我可以使用user.getPhotoUrl()进行检索),而且我可以将这些网址存储为Uri的网址,但不能将其存储为Firebase存储的URI 。我唯一的猜测就是Uri的Firebase存储时间要长得多,因此这个问题。如果你们中的任何一位能够对这个问题有更深入的了解,那将是非常棒的,但是我非常感谢帮助,谢谢! – Sethsmagic
问题在于getPhotoUrl()方法返回一个Uri。关于您可以保存在实时数据库中的数据类型,请参阅读写数据文档: https://firebase.google.com/docs/database/android/read-and-write 希望这有助于 – wnieves19
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);
}
你可以张贴一些代码? – wnieves19
我一直在数据库中存储文件的下载URL(和其他元数据)。所以它必须是特定于您的使用情况。没有看到[重现问题的最小代码](http://stackoverflow.com/help/mcve)(阅读链接,这很有用),这将很难说更多。 –
感谢您的快速回复。我回家后肯定会在今天晚上提供一些代码。 – Sethsmagic