#javascript #firebase-storage
#javascript #firebase-storage
Вопрос:
У меня есть этот код для создания константы для ссылки на изображение и продукта
export const createProduct = async (productData, image) => {
const imageTimestamp = Date.now().toString();
const newImageRef = await firebaseStorage
.ref(`/images/${imageTimestamp}`).toString();
const newProductRef = await firebaseDb.ref("products");
const uploadTask = await firebaseStorage
.refFromURL(newImageRef)
.put(image)
if (uploadTask.state === "success") {
const url = await firebaseStorage
.ref(newImageRef)
.child(imageTimestamp)
.getDownloadURL()
const result = {
...productData,
image: url,
};
const postRef = firebaseDb.ref(newProductRef).push();
return postRef
.set(result)
.then((product) => {
return {
product,
status: "ok"
};
})
.catch(() => ({ status: "error" }));
}
return { status: "failure" };
};
Но я получил эту ошибку
Хранилище Firebase: недопустимый аргумент в
ref
на ind … дочернем пути, но вместо него получен URL, используйте refFromURL.
Если я ошибаюсь в этом, пожалуйста, помогите мне
Ответ №1:
Из сообщения об ошибке похоже, что вы передаете URL-адрес загрузки в вызов child(...)
. child()
Метод может использоваться только с относительными путями, такими как child("dir")
или child("image.jpg")
. Если у вас есть полный URL для загрузки, используйте firebaseStorage.refFromURL(...)
Во-вторых, похоже, что вы делаете какие-то странные вещи с StorageReference
экземплярами. Это должно быть намного ближе:
const imageTimestamp = Date.now().toString();
const newImageRef = await firebaseStorage.ref(`/images/${imageTimestamp}`);
const newProductRef = await firebaseDb.ref("products");
const uploadTask = await newImageRef.put(image)
if (uploadTask.state === "success") {
const url = await newImageRef.getDownloadURL()
...