使用下载url删除Firebase存储映像url

使用下载url删除Firebase存储映像url,firebase,firebase-realtime-database,firebase-storage,google-cloud-functions,Firebase,Firebase Realtime Database,Firebase Storage,Google Cloud Functions,我使用Firebase存储和实时数据库分别存储图像及其下载url。文件名是以随机方式生成的,下载url是通过这种方式生成的,并保存到实时数据库中 情景: 如果用户上传新图像(例如个人资料图像),我想借助downloadImageurl删除旧图像(最初上传图像时生成下载图像url,并将其保存在实时数据库中)。如何删除旧图像?我尝试了以下代码,但要使其正常工作,我必须获取文件名 gcs .bucket("e**********.appspot.com") // find it

我使用Firebase存储和实时数据库分别存储图像及其下载url。文件名是以随机方式生成的,下载url是通过这种方式生成的,并保存到实时数据库中

情景: 如果用户上传新图像(例如个人资料图像),我想借助downloadImageurl删除旧图像(最初上传图像时生成下载图像url,并将其保存在实时数据库中)。如何删除旧图像?我尝试了以下代码,但要使其正常工作,我必须获取文件名

gcs
            .bucket("e**********.appspot.com") // find it in Firebase>Storage>"gs://...." copy without gs 
             //or go to console.cloud.google.com/ buckets and copy name
            .file("images/" +event.params.uid+"/"+filename) //file location in my storage
            .delete()
            .then(() => {
                console.log(`gs://${bucketName}/${filename} deleted.`);
            })
            .catch(err => {
                console.error('ERROR-DELETE:', err+ " filename: "+filename);
            });

根据您的需要:

  • 保留原始图像,并能够在将来手动删除它
  • 生成缩略图后立即将其删除 我想你正在使用

    1-必须在数据库中存储文件路径。然后,每当您想从前端删除它时:

    import * as firebase from 'firebase';
    ...
    const store = firebase.storage().ref();
    // Depending on which db you use and how you store, you get the filePath and delete it:
    store.child(image.filePath).delete();
    
    2-继续firebase功能的承诺,如下所示:

    // ...LAST PART OF THE EXAMPLE...
    .then(() => {    
    // Add the URLs to the Database
    return admin.database().ref('images').push({path: fileUrl, thumbnail: thumbFileUrl});
    }).then(() => {
    // ...PART YOU CAN ADD TO DELETE THE IMAGE UPLOADED
    const bucket = gcs.bucket(bucket);
    bucket.file(filePath).delete();
    })
    
    “bucket”是以前创建的常量:

    const bucket = gcs.bucket(event.data.bucket);
    
    以及“文件路径”:

    这可能对你有所帮助

    此代码将从URL获取文件名并删除该文件。目前这个解决方案适合我

    代码

    import * as firebase from 'firebase';
    ...
    let name = imagePath.substr(imagePath.indexOf('%2F') + 3, (imagePath.indexOf('?')) - (imagePath.indexOf('%2F') + 3));
    name = name.replace('%20',' '); 
    let storagePath = firebase.storage().ref();
    storagePath.child(`images/${name}`).delete();
    

    您是否在云函数中运行此代码?你在使用谷歌云存储节点API?如果您提供更多关于此处发生的情况的上下文,可能会有所帮助。@DougStevenson是的,我正在使用云函数。请查找更新的问题我正在使用const gcs=require(“@google cloud/storage”)();并且已经按照github教程生成了缩略图。任何关于这方面的帮助都将有助于继续。您可以将文件的路径以及下载URL存储在存储器中。当需要删除时,它的路径也将可用。
    import * as firebase from 'firebase';
    ...
    let name = imagePath.substr(imagePath.indexOf('%2F') + 3, (imagePath.indexOf('?')) - (imagePath.indexOf('%2F') + 3));
    name = name.replace('%20',' '); 
    let storagePath = firebase.storage().ref();
    storagePath.child(`images/${name}`).delete();