首页 > 解决方案 > 您如何从 Firebase 存储中提取图像列表?

问题描述

我已成功将一些照片上传到 Firebase,但我想在某个位置下载所有图像

目前我必须做这个丑陋的代码:

const getPhotos = async () => {
    var storage = firebaseApp.storage()
    var gsReference = storage.refFromURL('gs://my-app.appspot.com/')
    for (let i = 1; i < 4; i++) {
        await gsReference
            .child(`${user.id}/${name}/photo${i}.jpg`)
            .getDownloadURL()
            .then((url) => {
                fetch(url).then((res) => {
                    setPhotos((photos) => photos.concat(res.url))
                })
            })
            .catch((error) => {
                console.log('ERROR!', error)
            })
    }
}

这依赖于所有被调用的照片photo1.jpgphoto2.jpg

有没有办法把它们都拉出来,不管它们叫什么?

标签: javascriptreactjsfirebasefirebase-storage

解决方案


显然有Reference.listAll功能

const getPhotos = async () => {
    const storage = firebaseApp.storage();
    let reference = storage.refFromURL('gs://my-app.appspot.com/');
    reference = reference.child(`${user.id}/${name}`);

    const {items} = await reference.listAll();
    const urlPromises = items.map(pr => pr.getDownloadURL()
      .then(url => fetch(url))
      .catch(error => error));

    let urls = await Promise.all(urlPromises);
    urls = urls.filter(result => !(result instanceof Error));

    setPhotos(urls);
}

推荐阅读