【问题标题】:How to get a reference to firebase image to be able to delete it?如何获取对 Firebase 图像的引用以便能够将其删除?
【发布时间】:2020-09-20 18:32:46
【问题描述】:

所以我有这个功能来检索我所有的照片

const getPhotos = async () => {
    const storage = firebaseApp.storage()
    let gsReference = storage.refFromURL('gs://my-app/')
    gsReference = gsReference.child(`${id}/${country}`)

    const { items } = await gsReference.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)
}

这一切都很好

现在的问题是当我想删除图像时。我有这个功能

const deletePhoto = (photoRef) => {
    console.log('PHOTO:', photoRef)
    var storage = firebaseApp.storage()
    var storageRef = storage.ref(`${id}/${country}`)
}

问题是我无法知道要删除的图像的引用?

我正在映射所有图像,并为每个图像附加删除功能并将照片作为 arg 传递。但是这只是返回给我这个

body: ReadableStream {locked: false}
bodyUsed: false
headers: Headers {append: function, delete: function, get: function, has: function, set: 
ok: true
redirected: false
status: 200
statusText: ""
type: "cors"
url: "https://firebasestorage.googleapis.com/v0/b/my-app.appspot.com/o/F2DFB6714-8082-4AF9-89…"

它看起来像 url 确实引用了路径,但它在最后切断了一些路径。另外,我真的不想将其拼接起来以找到图像。必须有一种简单的方法来设置参考??

【问题讨论】:

    标签: javascript reactjs firebase firebase-storage


    【解决方案1】:

    您可以在catch 之后将ResponseReference 对象组合到另一个then 回调中。

    const getPhotos = async () => {
        const storage = firebaseApp.storage()
        let gsReference = storage.refFromURL('gs://my-app/')
        gsReference = gsReference.child(`${id}/${country}`)
    
        const { items: references } = await gsReference.listAll()
        const result = references.map(async (reference) => {
            const url = await reference.getDownloadURL();
            let response = null;
    
            try {
               response = await fetch(url);
            }
            catch(error) {
               response = error;
            }
    
            return {
               response,
               url,
               reference
            }
          }
        )
    
        let referencesWithUrls = await Promise.all(result)
        referencesWithUrls = referencesWithUrls.filter((result) => !(result.response instanceof Error))
        setPhotos(referencesWithUrls.map(pr => pr.response))
    }
    

    【讨论】:

    • 所以我将其视为未定义:const { references } = await gsReference.listAll() 所以我将其更改为const { items } = await gsReference.listAll(),这几乎可以工作,但我得到id/country 作为参考,但我需要该路径内的图像跨度>
    • 我想我们已经很接近了。但是在 Reference.location.path 中,当它需要 randomid/country.pathtofile.jpg 时,它会以 randomid/country 的形式返回
    • 当我这样做时我也可以看到正确的路径:地图内的`console.log(reference)`
    • 更新答案。
    • 我做了fullpath 但做fullPath 是正确的
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多