试图等到多个图像上传到 cloudinary

Posted

技术标签:

【中文标题】试图等到多个图像上传到 cloudinary【英文标题】:Trying to wait until multiple images upload to cloudinary 【发布时间】:2021-12-02 13:15:26 【问题描述】:

我被困在尝试将多个图像上传到 Cloudinary 并在响应中将数组中的 cloudinary url 发回。我一直在想办法在发回 photoAlbum 数组之前等待循环完成,但没有运气。代码看起来像这样:

server.js

app.post('/uploadimages', async (req, res) => 
    const  imgFiles, username  = req.body;

    const photoAlbum = await cloudinaryUpload(imgFiles, username)
    
    res.send(photoAlbum)
)

cloudinary.js

require("dotenv").config()
const cloudinary = require("cloudinary").v2


module.exports.cloudinaryUpload = async (imgFiles, username) => 
    const photoAlbum = []

    await imgFiles.forEach((img) => 
        const imageid = uuidv4();

        cloudinary.uploader.upload(
            img,
            
                folder: username,
                resource_type: "image",
                public_id: imageid,
            ).then((result) => 
                console.log("*** Success: Cloudinary Upload: ", result.url);
                photoAlbum.push( imageid: imageid, url: result.url );
            ).catch((err) => 
                console.log("*** Error: Cloudinary Upload");
            )
    )

    console.log("Cloudinary upload done: ", photoAlbum);

    return photoAlbum;

【问题讨论】:

【参考方案1】:

forEach 将始终返回 void - 在 JS 中未定义 - 无论回调如何。您想要做的是返回一系列承诺,然后等待它们全部完成。 为此,您应该使用mapPromise.all 的组合。

const promises = imgFiles.map(() => 
  const imageid = uuidv4();

   return cloudinary.uploader.upload(
            img,
            
                folder: username,
                resource_type: "image",
                public_id: imageid,
            ).then((result) => 
                console.log("*** Success: Cloudinary Upload: ", result.url);
                photoAlbum.push( imageid: imageid, url: result.url );
            ).catch((err) => 
                console.log("*** Error: Cloudinary Upload");
            );
);

await Promise.all(promises);

map 函数创建了一个新的 promise 数组,这要归功于 return cloudinary.uploader.uploadPromise.allawait 结合使用,等待所有图像上传。

【讨论】:

以上是关于试图等到多个图像上传到 cloudinary的主要内容,如果未能解决你的问题,请参考以下文章

使用 Multer 和 Express 将多个图像上传到 Cloudinary

如何使用 javascript 将多个图像上传到 cloudinary 并将 url 发送到另一个数据库

使用 cloudinary 上传多个图像

在 Android 中将图像上传到 Cloudinary 失败

Cloudinary 如何更新/编辑数组中的图像

Ruby on Rails Cloudinary 上传多张图片