javascript - 使用 Promise.all() 将多个图像上传到 AWS s3。如何处理只有一张图片无法上传的错误?

标签 javascript amazon-web-services amazon-s3 axios image-uploading

我正在尝试使用签名 URL 将多个图像上传到 s3 存储桶。流程是前端应用程序向服务器发送 GET 请求,以获取要上传的每个图像的签名 url。然后,前端应用程序使用签名的 URL 将图像直接上传到 s3 存储桶。

我的问题是如何处理一张图片上传失败的情况?

例如,如果我想上传三张图片,其中一张上传失败,我是否必须先从 s3 存储桶中删除另外两张图片,然后才能让用户尝试再次上传文件?

/*
 * @param {array} images: Array of objects of shape ({image: object, signedUrl: string})
 * 
 */

const uploadImages = (images) => {
    const axiosPutPromises = images.map(({ image, signedUrl }) => {
      const putFile = () => axios.put(signedUrl, image, {
        headers: {
          "Content-Type": image.type
        }
      });
      
      return putFile();
    });
    
    try {
      const res = await axios.all(axiosPutPromises);
      // dispatch res to redux store

    } catch (err) {
      /*Not sure how to handle error where only one files fails to upload*/
    }

最佳答案

我没有使用过 axios,但是我在一个项目中使用我正在处理的常规 Promise 处理这个问题的方式是避免拒绝。

因此,我捕获了每个作业 Promise 中的任何错误,然后接受具有结构化值的 Promise,该值让我可以区分成功和失败。然后,您可以检查 Promise.all() 返回的数组并执行您想要的任何错误处理。

关于javascript - 使用 Promise.all() 将多个图像上传到 AWS s3。如何处理只有一张图片无法上传的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51458381/

相关文章:

javascript - 使用 Jquery 从多维 JSON 数组获取变量

javascript - CSS 不适用于文本区域

amazon-web-services - AWS CLI : create EC2 instance and attach instance profile (unauthorized)

java - AWS Elastic Beanstalk 中的容器选项

amazon-s3 - Cloudformation - 向现有存储桶的 SQS 发送 s3 通知

python - 我可以使用 django-storages 和 boto 将 ImageField 直接从 Django 管理上传到 S3 吗?

javascript - React 按钮组件 onClick() 在页面加载时触发,而不是 onclick

javascript - 使用函数更改 div 属性?

node.js - 调用 Lambda 函数时返回 Promise

url - 缩短 S3 签名网址