如何按选择的顺序将多个文件上传到 Firebase 存储?

Posted

技术标签:

【中文标题】如何按选择的顺序将多个文件上传到 Firebase 存储?【英文标题】:How to upload multiple files to firebase storage in the order they were selected? 【发布时间】:2019-12-12 09:18:49 【问题描述】:

我一直在使用 Firebase 存储来保存多个图像,然后将它们的 URL 存储在 Firestore 中以在前端显示图像。 URL 存储在 firestore 的数组字段中。但是,当我将多个图像上传到存储时,它们不会按照它们被选择的顺序上传(顺序是它们名称的图像)。它们都同时上传,因此首先上传较小尺寸的图像,并且图像不会按照它们被选择的顺序显示。上一张图片上传后如何上传下一张图片?

我正在为我的项目使用 Vue

我已将 Files List 节点转换为一个数组,并使用 forEach 循环遍历每个单独的文件并将其存储在 firebase 存储中。

<input v-on:change.prevent='imageList' type="file" multiple name ='pImages' 
id = 'pImages'>
const pfInput = document.querySelector('#pImages').files;
const pI = Array.prototype.slice.call(pfInput);

pI.forEach((image) => 
// Storing Images in firebase cloud storage
const uploadTask = storage.ref(`projects/$this.pUsername/$image.name`)
                           .put(image)

uploadTask.on('state_changed', (snapshot) , (error) , 
()=>
   storage.ref(`projects/$this.pUsername`).child(image.name)
                                            .getDownloadURL()
                                            .then((url) => 
  //Code to store the URL to firestore
)
)

前端以存储 URL 的数组的索引顺序显示图像。由于文件同时上传,较短的文件首先上传,因此它们的 URL 首先被存储。因此文件不会按照它们在 PC 上选择的顺序显示(按名称)。

我想按照选择的顺序上传文件。

你能帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

我想出了一个解决办法。我将所有 URL 以随机顺序存储在一个数组中,并使用 .then() 对我的列表进行排序。我意识到图像的 URL 是按其名称排序的,因此当您使用数组排序时,URL 会按照文件的顺序重新排列。

之后

.then((url)=>
//Get URL of images
this.imageList.push(url)
) 

你可以:

.then(()=>
 this.imageList.sort() //Sorts the list URL's in the order of the file name.

【讨论】:

以上是关于如何按选择的顺序将多个文件上传到 Firebase 存储?的主要内容,如果未能解决你的问题,请参考以下文章

将多个图像上传到 Firebase

如何将多个文件上传到 Firebase?

Flutter:如何将pdf文件上传到firebase存储?

如何将多个图像上传到 Firebase 存储并返回多个下载 URL

如何将多个图像上传到Firebase存储并返回多个downloadURL

如何从输入字段将图像上传到 Firebase 云存储?