【问题标题】:Firebase delete images from urlFirebase 从 url 中删除图片
【发布时间】:2022-01-02 18:23:52
【问题描述】:

我需要从 firebase 存储 (react.js) 中删除图像,但是当我尝试恢复 url 时,控制台会给我: FirebaseError:Firebase 存储:对象“图像/[对象对象]”不存在。 (存储/未找到对象) { “错误”: { “代码”:404, “未找到信息。” } }

这是代码:

const deleteFromFirebase = (url) => {
    
        let imageRef = storage.ref(`/images/${url}`);
            
            imageRef.delete().then(() => {
            console.log("Deleted")
        }).catch(err => console.log(err))
      };

我需要插入索引吗?

【问题讨论】:

  • 您能在imageRef 之前console.log(url) 并分享它的屏幕截图吗?
  • 您必须在ref() 中传递要删除的文件的路径,但这里的url 似乎是某种对象。比如你的路径是'/images/image_1.png',那么这里的URL值应该是image_1.png。你在某处有完整的路径吗?
  • const uploadTask = await storage.ref(/images/${imageId}).put(imageAsFile); const imageUrl = await storage.ref('images').child(uploadTask.metadata.name).getDownloadURL();我在上传新图片时上传和恢复网址是这样的
  • 在这种情况下,您能否分享您尝试从 Firebase 存储控制台和/images/${url} 删除的文件的屏幕截图并分享相同的输出?如果路径匹配,则应将其删除。

标签: javascript reactjs firebase firebase-storage


【解决方案1】:

imageUrl 变量不是 URL

您可以通过在函数顶部插入以下 console.log 来证明这一点:

const deleteFromFirebase = (url) => {

  console.log(JSON.stringify(url, null, 2);  

它实际上不应该是一个 URL

URL 类似于https://stackoverflow.com/questions/70558620/firebase-delete-images-from-url。您不希望将图像存储在以下位置,对吗?

/images/https://stackoverflow.com/questions/70558620/firebase-delete-images-from-url

因此,我建议在您的“deleteFromFirebase”函数中不要将其称为 URL,而应将其称为“pathWithinImagesFolder”或其他名称,这样可以减少混淆的范围。

下一步是找出 firebase 存储函数返回了什么

const imageUrl = await storage.ref('images').child(uploadTask.metadata.name).getDownloadURL();

console.log("Original value is ",imageUrl)
   

我怀疑它返回的是一个超长的 URL,可能在末尾添加了额外的内容以授予下载权限等。

我的建议

修改所有术语。有两个不同的东西。

  • pathWithinImages,例如house.png;
  • downloadUrl,例如https://google.something.blahblah/bucketName/blah blah?downloadKey=239850598745

所以当你上传时,要清楚:

const pathWithinImages = uploadTask.metadata.name 
const downloadUrl = await storage.ref('images').child(pathWithinImages).getDownloadURL();

同时存储pathWithinImagesdownloadUrl

当你来删除图像时,使用pathWithinImages

const deleteFromFirebase = (pathWithinImages) => {

    storage.ref(`/images/${pathWithinImages}`)
      .delete()
      .then(() => {
        console.log("Deleted")
      }).catch(err => console.log(err))
  };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-02
    • 2010-12-13
    • 2020-10-22
    • 2023-04-09
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多