Node.JS将多个图像上传到AWS S3 Async

时间:2018-11-07 16:06:01

标签: node.js amazon-web-services asynchronous amazon-s3 upload

我创建了2个功能,一个用于上传一个图像,另一个用于上传多个图像。

在上传多张图片时,上传一张图片对我来说工作正常,这些图片被上传到S3,然后我尝试将每个图片路径推送到一个数组,但是当我返回数组时,它为空

if(message.guild.owner === message.member)
{
    /* Code here */
}

我这样调用函数:

module.exports = {
async uploadOneFile(image) {
    const params = {
        Key: moment().format('YMMDDHHmmss') + '-' + image.upload.name,
        Bucket: config.get("AwsConfig.bucketName"),
        Body: image.upload.data,
        ContentType: image.upload.mimetype,
        ACL: 'public-read-write'
    };

    await s3.putObject(params).promise();
    return baseURL + params.Key;
},
uploadMultipleFiles(images) {
    const imagesPath = [];

    images.upload.map(async (image) => {
        const params = {
            Key: moment().format('YMMDDHHmmss') + '-' + image.name,
            Bucket: config.get("AwsConfig.bucketName"),
            Body: image.data,
            ContentType: image.mimetype,
            ACL: 'public-read-write'
        };

        await s3.putObject(params).promise();
        imagesPath.push(baseURL + params.Key);
    });

    return imagesPath;
}};

在控制台输出中,我收到[]

请帮助。

1 个答案:

答案 0 :(得分:0)

也许尝试在地图上返回字符串并将地图返回值分配给imagesPath数组?

像这样:

uploadMultipleFiles(images) {
    const imagesPath = [];

    imagesPath = images.upload.map(async (image) => {
        const params = {
            Key: moment().format('YMMDDHHmmss') + '-' + image.name,
            Bucket: config.get("AwsConfig.bucketName"),
            Body: image.data,
            ContentType: image.mimetype,
            ACL: 'public-read-write'
        };

        await s3.putObject(params).promise();
        return Promise.resolve(baseURL + params.Key);
    });

    return imagesPath;
}