Javascript Firebase多文件上传:如何确保URL按照上传的准确顺序下载?
以下是我在Firebase上尝试使用我的web应用程序所做的:Javascript Firebase多文件上传:如何确保URL按照上传的准确顺序下载?,javascript,reactjs,firebase,promise,firebase-storage,Javascript,Reactjs,Firebase,Promise,Firebase Storage,以下是我在Firebase上尝试使用我的web应用程序所做的: 让用户定义上载多个文件时的上载顺序 按定义的顺序上载文件 按定义的顺序下载并存储URL,以便传递给另一个函数 下面是执行#2和#3的代码。问题是,虽然文件实际上是按预定顺序上传的,但URL并没有按预定顺序存储。我想原因是getDownLoadURL()是一个异步操作,因此较大文件的URL下载速度较慢,因此存储时间比预期晚。例如,发生如下情况: upload order: [1.jpg, 2.jpg, 3.jpg]; intend
upload order: [1.jpg, 2.jpg, 3.jpg];
intended url array: [url_to_1.jpg, url_to_2.jpg, url_to_3.jpg];
actual url array: [url_to_1.jpg,url_to_3.jpg,url_to_2.jpg];
我对此进行了多次测试,但问题仍然存在
以下是我试图做的:确保只有在下载并存储URL之后,才能开始上传下一个文件。i、 不是异步的,而是同步的。下面是我目前使用的代码。解决办法是什么
const url_array_get = () => {
const user=firebase.auth().currentUser;
let photos1=null;
//Code to sort the photos in the intended order
if (photoorder!==null) {
photos1 = photoorder.map(position => photos[position - 1]);
}
else {
photos1 = photos;
}
//Code to upload the files in the intended order, store the urls, and return them for the next function
const promises=[];
photos1.forEach((photo)=> {
const a=photo.name;
const a1=a.split('.');
const b=uuidv4()+'.'+a1[1];
let storageRef=firebase.storage().ref('data/'+user.uid+'/posts/'+b);
promises.push(
storageRef.put(photo).then((snapshot)=>{
return snapshot.ref.getDownloadURL()
})
)
})
return Promise.all(promises);
}
提前多谢 上传文件时,您可以维护一个唯一的(比如日期和时间)键,下载文件时,只需根据该键对其进行排序。这能帮你达到目的吗?上传文件时,你可以保留一个唯一的(比如日期和时间)键,下载文件时,只需根据该键对其进行排序。这会帮助你实现你的目标吗?