【发布时间】:2021-06-02 11:45:22
【问题描述】:
所以基本上我的问题在于标题。我有一张图片,而不是我有多个文件上传输入。我想将它们添加到 Firebase 存储中。我这样做了,它工作正常,当我想获取那些下载网址时问题就来了。在这种情况下,获取多个文件的 url 可以正常工作,当我想将它传递给这个单独的图像文件时,它最终会为空。顺便说一句,我正在使用 vue.js。所以这是我使用的方法的代码,所有的输入都很好。
methods:{
async uploadImageFile() {
var slugify = require('slugify')
let imageName = this.$refs.image.files[0].name.split(".")[0]
let ext = this.$refs.image.files[0]['name'].split(".")[1]
this.blog.image = slugify(imageName)
const {canvas} = this.$refs.cropper.getResult();
if (canvas) {
canvas.toBlob( blob => {
let uploadTask = storageRef.child('blogs/' + this.blog.image +"-"+ moment().unix()+ "." +ext)
try {
uploadTask.put(blob)
let downloadURL = uploadTask.getDownloadURL()
this.blog.imageUrl = downloadURL
}
catch (error){
console.log(error)
}
});
}
},
save() {
let slugify = require("slugify")
this.blog.slug = slugify(this.blog.title)
this.blog.user = usersCollection.doc(this.$store.state.userProfile.uid)
this.blog.active = false
this.blog.created = firebase.firestore.Timestamp.fromDate(new Date())
blogsCollection.add(this.blog).then(() => {
router.push('/admin/blogs');
}).catch((error) => {
console.error("Error adding document: ", error);
});
},
async saveFiles(){
await this.uploadImageFile()
for(const fileIndex in this.files){
let timestamp = new Date()
let fileObject = this.files[fileIndex]
let fileNameName = fileObject.name
let ext = fileObject.name.split(".")[1]
try {
let uploadTask = storageRef.child('blogs/' + fileNameName.split(".")[0] + "-" + timestamp.getTime().toString() + "." + ext)
await uploadTask.put(fileObject)
let downloadURL = await uploadTask.getDownloadURL()
this.blog.files.push({fileName:fileNameName,
fileURL:downloadURL})
} catch (error){
console.log(error)
}
}
this.save()
}
}
我为 saveFiles() 函数设置了@click 方法..
【问题讨论】:
标签: javascript vue.js asynchronous firebase-storage