Я пытаюсь добавить изображение в хранилище базы данных, а также добавить данные в хранилище с помощью URL-адреса изображения. Изображение загружается в хранилище Firebase, но оно не возвращает URL, если я использую метод getDownloadUrl. Он возвращает эту ошибку:
Uncaught TypeError: Невозможно прочитать свойство 'getDownloadURL' с неопределенным
Вот так я получаю ввод и сохраняю данные:
//Add news to firestore
var storageRef = storage.ref('images');
const addNewsForm = document.querySelector('#addNewsModal');
var user = firebase.auth().currentUser;
addNewsForm?.addEventListener('submit', (e) => {
e.preventDefault();
//get user info
const img = document.getElementById("uploadFile").files[0];
const imgName = (+new Date()) + '-' + img.name;
const metadata = { contentType: img.type };
const title = document.getElementById("inputNewsTitle").value;
const content = document.getElementById("inputNewsContent").value;
const publisher = document.getElementById("inputNewsPub").value;
if (user != null) {
//Add Images to Firebase Storage
// Create a child reference
var imagesRef = storageRef.child(imgName).put(img, metadata);
imagesRef.snapshot.storageRef.getDownloadURL().toPromise()
.then(function(url) {
console.log('Image Url -> ' + url);
// document.querySelector('#someImageTagID').src = url;
db.collection("news").add({
newsImage: url,
newsTitle: title,
newsContent: content,
newsPublisher: publisher,
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
adminUid: user.uid
})
.then(function (docRef) {
console.log("Document written with ID: ", docRef.id);
})
.catch(function (error) {
console.error("Error adding document: ", error);
});
}).catch(console.error);
} else {
console.log('User is null');
}
});
Из вышеуказанный код; Сначала я получаю входное изображение, а затем отправляю его в хранилище файловой базы. Затем я передаю URL-адрес изображения и отправляю его в firebase firestore.
Мои правила хранения:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}