我使用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);
});
答案 0 :(得分:1)
这可能会帮助你。
此代码将从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();
答案 1 :(得分:0)
取决于您的需求:
我想你正在使用this example
1-您必须将filePath存储在数据库中。然后,只要你想从前面删除它:
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();
})
&#34;铲斗&#34;是先前创建的const:
const bucket = gcs.bucket(event.data.bucket);
以及&#34; filePath&#34;:
const filePath = event.data.name;
答案 2 :(得分:0)
要删除带有 url 的图片,可以使用 refFromUrl() 函数获取 ref 然后轻松删除它
const storage = firebase.storage();
storage.refFromURL(imageUrl).delete()
答案 3 :(得分:0)
const downloadUrl = "https://firebasestorage.googleapis.com/v0/b/***.appspot.com/o/***?alt=media&token=***";
第一个***代表FIREBASE_STORAGE_BUCKET
第二个***代表文件在bucket中的位置
第三个***代表公共访问图像/文件的令牌
作为 Web 开发人员,您知道 URI 是经过编码的,例如 "@" = "%40", "$" = "%24", " " = "%20" 等
由于我们使用的是 JavaScript,我们可以做的是像这样解码 URI 以获得确切的路径
const path = decodeURIComponent(downloadUrl.split("o/")[1].split("?")[0]);
return await bucket
.file(path)
.delete()
.then(() => true)
.catch((error) => {
throw new TypeError(`deleteImages ${error}`);
});