我目前正在尝试使用Vue 2,Vuetify和Firebase / Firestore制作图像上传器。目前,我的图片已成功上传到Firestore,参考下载URL存储在名为“ images”的数组中,但它们的存储顺序没有出现在我的前端。
当前,这是选择要上传文件的前端的外观:
当按下Submit Presentation时,我在控制台中打印文件: https://i.imgur.com/GSQqYtM.png
如您所见,它们按顺序打印,但是出现的另一个问题是图像无法发送到Firebase数据库,但是仍然可以上传到Firestore。为了使其显示在Firebase数据库中,我将不得不再次按下Submit Presentation按钮,否则Firebase中的数组将仅显示为图像:[]。我认为这是另外一个问题,但这可能有助于弄清主要问题。
当我再次按下Submit Presentation时,图像数组会使用每个下载URL进行更新,但是顺序不正确:
它说Slide1,然后是Slide3,Slide12,Slide9等。我不知道为什么会这样。即使在Firestore中,它们也不正常。与Firebase数据库中的顺序完全不同。
当按下“提交演示文稿”按钮时,这是我处理文件上传的方式:
uploadImages() {
if (this.files) {
this.files.forEach(file => {
var storageRef = fb.storage().ref('presentations/' + file.name);
//storageRef.put(file);
let uploadTask = storageRef.put(file);
uploadTask.on('state_changed', (snapshot) => {
}, (error) => {
//Errors handled her
}, () => {
uploadTask.snapshot.ref.getDownloadURL().then((downloadURL) => {
this.presentation.images.push(downloadURL);
})
})
console.log(file);
db.collection("presentations").doc("mainPresentation").update(this.presentation)
})
}
}
我只希望按照选择图像的顺序存储图像,因为您可能已经注意到,这些图像是演示图像,因此当我必须从Firebase中读取内容时,我不希望将演示图像显示在其中。不同的顺序。
感谢您的帮助,谢谢!
答案 0 :(得分:0)
两件事。
首先,您要同时异步启动所有这些上传。由于它们都是同时发生的,因此它们可以以不同的顺序完成。如果您需要它们按顺序进行,那么您应该等待第一个完成,然后再启动第二个。我建议不要担心,然后根据需要对数据进行排序。
此外,您在Cloud Storage控制台中看到的文件的排序顺序是字典顺序,而不是数字顺序。在字典上,“ 11”位于“ 2”之前,因为第一个字符“ 1”的ASCII值小于“ 2”。如果您确实希望查看文件按数字排序,则应将数字用零填充,以使词法排序与数字排序匹配。例如,“ 001”,“ 002”,“ 003”等等。