Хранилище Firebase: недопустимый аргумент в `ref` на ind … дочернем пути, но вместо него получен URL, используйте refFromURL

#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()
    ...