我嘗試存儲將文件上傳到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