Home > Software engineering >  Firebase Storage Metadata Not Showing Up
Firebase Storage Metadata Not Showing Up

Time:07-10

I am trying to set metadata for my image but Firebase isn't taking in my custom metadata. After uploading the image I should see my metadata under 'Other Metadata'.

Below is how it's showing up for me now: enter image description here

My code is as follows, you can see I am adding custom metadata to my file:

import { firebaseApp } from "./firebase";
import { getStorage, ref, uploadBytesResumable, getDownloadURL } from "firebase/storage";
import { React} from "react";

// Initialize Firestore
const storage = getStorage(firebaseApp);


/**** PROPERTY LISTINGS ****/

// Upload 1 file to Firebase Storage
export async function uploadFile(file, houseId, houseName) {

    //const storage = getStorage();

    // Create the file metadata
    /** @type {any} */
    const metadata = {
        contentType: file.type,
        cacheControl: 'public,max-age=300',
        customMetadata: {
            houseId: houseId,
            houseName: houseName,
        },
    };

    console.log("metadata: ", metadata);


    // Upload file and metadata to the object 'images/mountains.jpg'
    const storageRef = ref(storage, 'property_images/'   houseId   '/'   file.name, metadata);
    const uploadTask = uploadBytesResumable(storageRef, file);

    // Listen for state changes, errors, and completion of the upload.
    uploadTask.on('state_changed',
        (snapshot) => {
            // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded
            const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            console.log('Upload is '   progress   '% done');
            switch (snapshot.state) {
                case 'paused':
                    console.log('Upload is paused');
                    break;
                case 'running':
                    console.log('Upload is running');
                    break;
            }
        },
        (error) => {
            // A full list of error codes is available at
            // https://firebase.google.com/docs/storage/web/handle-errors
            switch (error.code) {
                case 'storage/unauthorized':
                    // User doesn't have permission to access the object
                    break;
                case 'storage/canceled':
                    // User canceled the upload
                    break;

                // ...

                case 'storage/unknown':
                    // Unknown error occurred, inspect error.serverResponse
                    break;
            }
        },
        () => {
            // Upload completed successfully, now we can get the download URL
            getDownloadURL(uploadTask.snapshot.ref).then((downloadURL) => {
                console.log('File available at', downloadURL);
            });
        }
    );
}

I am even checking the metadata on my console and it's coming out at follows, so I know there are values being passed in: enter image description here

Below are my firestore storage rules:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {

//this is the part we changed...
      allow read, write: if true;
    }
  }
}

CodePudding user response:

The problem is here:

const storageRef = ref(storage, 'property_images/'   houseId   '/'   file.name, metadata);

You're passing the metadata to the ref function, which is not an expected argument for that function.

You'll instead want to pass the metadata to the call to uploadBytesResumable, which does accept a metadata argument

  • Related