将多张图片上传到Firebase存储时获取它们的网址

时间:2020-07-29 17:44:54

标签: javascript firebase web firebase-storage

您可以帮我在将图像上传到Firebase时获取URL数组吗?

我的imageUrl = [undefined,undefined]上传2张img

export const handleUploadProductPhoto = async (files) => {
  const imageUrl = await Promise.all(
    files.map((file) => {
      new Promise((resolve, reject) => {
        const uploadTask = firebase
          .storage()
          .ref()
          .child(`your/file/path/${file.name}`)
          .put(file);
        uploadTask.on(
          firebase.storage.TaskEvent.STATE_CHANGED,
          (snapshot) => {
            const progress =
              (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            if (snapshot.state === firebase.storage.TaskState.RUNNING) {
              console.log(`Progress: ${progress}%`);
            }
          },
          (error) => console.log(error),
          () => {
            uploadTask.snapshot.ref
              .getDownloadURL()
              .then((url) => resolve(url));  //I have success here - two urls
          }
        );
      });
    })
  ).then((res) => console.log(res));
};

1 个答案:

答案 0 :(得分:0)

您在return上缺少new Promise。所以应该是:

return new Promise((resolve, reject) => {
  ...

没有return,每个files.map((file) => {都不会返回任何内容(因此undefined),这就是Promise.all然后传递到您的then中的原因。