为什么我的文件没有上传到Firestore中,却没有按顺序上传?

时间:2019-04-18 21:35:58

标签: javascript firebase vuejs2 google-cloud-firestore firebase-storage

我目前正在尝试使用Vue 2,Vuetify和Firebase / Firestore制作图像上传器。目前,我的图片已成功上传到Firestore,参考下载URL存储在名为“ images”的数组中,但它们的存储顺序没有出现在我的前端。

当前,这是选择要上传文件的前端的外观:

files selected on frontend

当按下Submit Presentation时,我在控制台中打印文件: https://i.imgur.com/GSQqYtM.png

files in console

如您所见,它们按顺序打印,但是出现的另一个问题是图像无法发送到Firebase数据库,但是仍然可以上传到Firestore。为了使其显示在Firebase数据库中,我将不得不再次按下Submit Presentation按钮,否则Firebase中的数组将仅显示为图像:[]。我认为这是另外一个问题,但这可能有助于弄清主要问题。

当我再次按下Submit Presentation时,图像数组会使用每个下载URL进行更新,但是顺序不正确:

images array from Firebase

它说Slide1,然后是Slide3,Slide12,Slide9等。我不知道为什么会这样。即使在Firestore中,它们也不正常。与Firebase数据库中的顺序完全不同。

Firestore

当按下“提交演示文稿”按钮时,这是我处理文件上传的方式:

    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中读取内容时,我不希望将演示图像显示在其中。不同的顺序。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

两件事。

首先,您要同时异步启动所有这些上传。由于它们都是同时发生的,因此它们可以以不同的顺序完成。如果您需要它们按顺序进行,那么您应该等待第一个完成,然后再启动第二个。我建议不要担心,然后根据需要对数据进行排序。

此外,您在Cloud Storage控制台中看到的文件的排序顺序是字典顺序,而不是数字顺序。在字典上,“ 11”位于“ 2”之前,因为第一个字符“ 1”的ASCII值小于“ 2”。如果您确实希望查看文件按数字排序,则应将数字用零填充,以使词法排序与数字排序匹配。例如,“ 001”,“ 002”,“ 003”等等。