Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将文件从节点js上载到aws s3_Node.js_Amazon S3 - Fatal编程技术网

Node.js 将文件从节点js上载到aws s3

Node.js 将文件从节点js上载到aws s3,node.js,amazon-s3,Node.js,Amazon S3,我正在使用aws sdk上传用户输入图像,然后从aws获取图像链接,并将链接存储在mongoDB中。在这种情况下,当我运行.upload()时,它是异步的 const imgSRC = []; for (let img of image) { console.log(img); const params = { Bucket: process.env.AWS_BUCKET, Key: `${img.originalname}_${userID}`, Body: img.buffe

我正在使用aws sdk上传用户输入图像,然后从aws获取图像链接,并将链接存储在mongoDB中。在这种情况下,当我运行.upload()时,它是异步的

const imgSRC = [];


for (let img of image) {
console.log(img);
const params = {
  Bucket: process.env.AWS_BUCKET,
  Key: `${img.originalname}_${userID}`,
  Body: img.buffer,
};
s3.upload(params,  (error, data) => {
  if (error) {
    console.log(error);
    res.status(500).json({ msg: "server error" });
  }
   imgSRC.push(data.Location);
  console.log(imgSRC);
});
}

})); const post=等待newPost.save()

在这种情况下,当.save运行到mongodb时,还没有来自aws的imgLinks。我怎样才能解决这些问题


我已经尝试过async,但它不起作用

您需要以这种方式使用
Promise.all()

const uploadImage = (obj) => {
  return new Promise((resolve, reject) => {
    const params = {
      Bucket: process.env.AWS_BUCKET,
      Key: obj.key,
      Body: obj.body,
    }
    s3.upload(params, (error, data) => {
      if (error) {
        console.log(error);
        return reject(error);
      }
      return data;
    });
  })
}

const mainFunction = async () => {
  const promises = [];
  for (let img of image) {
    const options = {
      key: `${img.originalname}_${userID}`,
      body: img.buffer
    };
    promises.push(uploadImage(options));
  }
  const result = await Promise.all(promises);
  const imgSRC = result.map((r) => { return r.Location });
  return imgSRC;
}

您需要以这种方式使用
Promise.all()

const uploadImage = (obj) => {
  return new Promise((resolve, reject) => {
    const params = {
      Bucket: process.env.AWS_BUCKET,
      Key: obj.key,
      Body: obj.body,
    }
    s3.upload(params, (error, data) => {
      if (error) {
        console.log(error);
        return reject(error);
      }
      return data;
    });
  })
}

const mainFunction = async () => {
  const promises = [];
  for (let img of image) {
    const options = {
      key: `${img.originalname}_${userID}`,
      body: img.buffer
    };
    promises.push(uploadImage(options));
  }
  const result = await Promise.all(promises);
  const imgSRC = result.map((r) => { return r.Location });
  return imgSRC;
}

如果在
s3.upload
方法上使用
wait
,则应删除此方法的回调

try {
  const data = await s3.upload(params);
  imgSRC.push(data.Location);
  console.log(imgSRC);
} catch(e) {
  console.log(error);
  res.status(500).json({ msg: "server error" });
}

让我知道它是否有效。

如果您在
s3上使用
wait
方法,则应删除此方法的回调

try {
  const data = await s3.upload(params);
  imgSRC.push(data.Location);
  console.log(imgSRC);
} catch(e) {
  console.log(error);
  res.status(500).json({ msg: "server error" });
}

让我知道它是否有效。

它因某种原因不起作用。当我在控制台中注销该数据时。它说数据是未定义的。或者我认为我的代码中有输入错误或遗漏了一些单词。由于某种原因,它不起作用。当我在控制台中注销该数据时。它说数据是未定义的。或者我认为我的代码中有输入错误或缺少一些单词