我将重新利用现有的Vue.js / Firebase图像上传组件,以启用从存储中删除图像(https://codesandbox.io/s/219m6n7z3j)。我试图向代码中添加删除功能,以及为每个上传的图片添加按钮。我已经设置了remove()函数来定位Firebase存储中“ images /”目录中的图像。但是,我只会将错误消息返回到控制台。关于如何设置删除功能以删除上传的图像的任何建议?我的组件在下面。谢谢!
<template>
<div id="app">
<v-toolbar color="indigo" dark fixed app>
<v-toolbar-title>Vue Firebase Image Upload</v-toolbar-title>
</v-toolbar>
<v-app id="inspire">
<v-content>
<v-container fluid>
<v-layout align-center justify-center>
<v-flex xs12 sm8 md4>
<img :src="imageUrl" height="150" v-if="imageUrl" />
<v-text-field label="Select Image" @click="pickFile" v-model="imageName"></v-text-field>
<input type="file" style="display: none" ref="image" accept="image/*" @change="onFilePicked"/>
<v-btn color="primary" @click="upload">UPLOAD</v-btn>
</v-flex>
</v-layout>
<br />
<v-layout align-center justify-center>
<v-flex xs12 sm8 md4>
<div v-for="img in imgUrls">
<img :src="img.downloadUrl" height="150" />
<v-btn @click="remove()">delete</v-btn>
</div>
</v-flex>
</v-layout>
</v-container>
</v-content>
</v-app>
</div>
</template>
<script>
import firebase from 'firebase';
import { db } from "./main";
export default {
name: "App",
data() {
return {
photo: null,
photo_url: null,
dialog: false,
imageName: "",
imageUrl: "",
imageFile: "",
imgUrls: []
};
},
created() {
this.getImages();
},
methods: {
getImages: function() {
db.collection("images")
.get()
.then(snap => {
const array = [];
snap.forEach(doc => {
array.push(doc.data());
});
this.imgUrls = array;
});
this.imageName = "";
this.imageFile = "";
this.imageUrl = "";
},
pickFile() {
this.$refs.image.click();
},
onFilePicked(e) {
const files = e.target.files;
if (files[0] !== undefined) {
this.imageName = files[0].name;
if (this.imageName.lastIndexOf(".") <= 0) {
return;
}
const fr = new FileReader();
fr.readAsDataURL(files[0]);
fr.addEventListener("load", () => {
this.imageUrl = fr.result;
this.imageFile = files[0];
});
} else {
this.imageName = "";
this.imageFile = "";
this.imageUrl = "";
}
},
upload: function() {
var storageRef = firebase.storage().ref();
var mountainsRef = storageRef.child(`images/${this.imageName}`);
mountainsRef.put(this.imageFile).then(snapshot => {
snapshot.ref.getDownloadURL().then(downloadURL => {
this.imageUrl = downloadURL;
const bucketName = "xxx-xxxx-xxxxx.appspot.com";
const filePath = this.imageName;
db.collection("images").add({
downloadURL,
downloadUrl:
`https://firebasestorage.googleapis.com/v0/b/${bucketName}/o/images` +
"%2F" +
`${encodeURIComponent(filePath)}?alt=media`,
timestamp: Date.now()
});
this.getImages();
});
});
},
remove: function() {
firebase.storage().ref('images/' + this.imageFile).delete()
.then(() => {
this.imageURL = ''
})
.catch((error) => {
console.error(`file delete error occurred: ${error}`)
})
}
},
components: {}
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>