javascript - 为什么我的文件没有按顺序上传到 Firestore?
问题描述
我目前正在尝试使用 Vue 2、Vuetify 和 Firebase/Firestore 制作图像上传器。目前,我的图片已成功上传到 Firestore,参考下载 URL 存储在一个名为“images”的数组中,但它们并没有像我的前端那样按顺序存储。
这是当前选择要上传的文件的前端外观:
按提交演示文稿时,我让它在控制台中打印文件: https ://i.imgur.com/GSQqYtM.png
如您所见,它们按顺序打印,但出现的另一个问题是图像不会发送到 Firebase 数据库,但它们仍会上传到 Firestore。要让它显示在 Firebase 数据库中,我必须再次按下提交演示文稿按钮,否则 Firebase 中的数组将仅显示为图像:[]。这是我认为的另一个问题,但它可能有助于找出主要问题。
当我再次按下提交演示文稿时,图像数组会随每个下载 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 读取时,我不希望演示图像以不同的顺序显示.
将不胜感激任何帮助,谢谢!
解决方案
两件事情。
首先,您将同时异步启动所有这些上传。由于它们都是同时发生的,它们可以以不同的顺序完成。如果您需要它们按顺序发生,那么您应该等待第一个完成,然后再开始第二个。我建议不要担心它,然后根据需要对数据进行排序。
此外,您在 Cloud Storage 控制台中看到的文件的排序顺序是字典顺序,而不是数字顺序。按字典顺序,“11”在“2”之前,因为第一个字符“1”的 ascii 值小于“2”。如果你真的想看到按数字排序的文件,你应该用零填充数字,以便词法排序与数字排序相匹配。例如,“001”、“002”、“003”等。
推荐阅读
- swift - 在连接到平移手势的 y 轴上居中对象
- parsing - 从应用程序更新 apk 不起作用
- sql-server - Need to return string in SQL Query using FOR XML PATH when Values in Select string are Null
- java - 如何在视图中显示文档的所有字段?
- python - 如何遍历嵌套的 JSON 对象并在 python 中更新值?
- azure-data-factory-2 - 当我的源文件没有固定的时间表来放置在 adls 上时,需要在 ADF 中管理多个管道。使用这个最可行的触发器是什么
- linux - 如何使用正则表达式从符号链接中查找文件?
- postgresql - 不调用石英作业
- bash - .bash_profile:95: 不匹配'
- javafx - 如何在javafx中将文本添加到矩形