用于上传/ putObject图像的AWS Lambda函数仅在本地计算机上起作用

时间:2018-09-30 09:54:00

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk

我有一个lambda函数,该函数使用'request'通过URL获取文件流,并假设将其上传到s3上的存储桶。 它在使用node的本地计算机上运行正常,但在lambda内部运行不正常。 运行lambda之后,我有一个空文件,其名称是我想要的。

您应该知道的东西

  • lambda函数是异步的
  • 节点版本为8.10
  • 在示例中,您看到了putObject,但我也尝试了上载
  • 即使添加90-120秒的手动睡眠以让lambda运行,文件也不会上传
  • 我尝试使用context.succeed或callback(“某些结果”),但仍无法正常工作

这是代码的相关部分

module.exports.handler = async(event, context, callback) => {
  const path = 'bucketToUpload';
  const name = 'imageFileName.jpg';
  let options = {
    uri: responseUrl, // This is the url of the image
    encoding: null
  };
  let reqRes = await request(options); // Here I have the stream
  let awsPutRes = await s3.client.putObject({
    Body: reqRes.body,
    Key: name,
    Bucket: path
  }).promise();
};

非常感谢您对此问题的任何帮助或指示。

2 个答案:

答案 0 :(得分:0)

看起来像您在$ awk '/^\[/{op=$0;next} /Powered.*b.1./{print gensub(/\[\s|\s\]/,"","g", op);exit}' ./list-modems /hfp/org/bluez/hci0/dev_D0_FC_CC_12_6D_4D 中发布

使用s3 putObject function.代替s3.putObject

s3.client.putObject

此链接也指向从URL在s3上上传图像帮助您:here

答案 1 :(得分:0)

因此,经过更多尝试,我才能够解决问题。

这是代码的一部分:

async function upload(fileStream, fileName, bucketName) {
  let params = {
    Body: fileStream,
    Key: fileName,
    Bucket: bucketName
  };
  await s3.client.putObject(params).promise();
}

module.exports.handler = async(event, context) => {
  try {
    let s3UploadParams = {
      uri: imageDownloadUrl,
      encoding: null
    };
    let imageFileStream = await request(s3UploadParams);
    await upload(imageFileStream, s3FileName, bucketName);
  } catch (err) {
    context.fail(null, 'Error trying to upload to aws' + err);
  }
}

不是使用'request'lib,而是使用'request-promise-native'从URL获取流。