upload/putObject 图像的 AWS Lambda 函数仅适用于本地计算机

AWS Lambda function for upload/putObject image works only on local machine

我有一个 lambda 函数,它使用 'request' 通过 URL 获取文件流,并假设将其上传到 s3 上的存储桶。 它在我的本地机器上使用节点完美运行,但在 lambda 内部运行不正常。 运行使用 lambda 后,我得到了一个空文件,其中包含我想要的名称。

你应该知道的事

这是代码的相关部分

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();
};

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

看起来你在 s3 putObject function.

中发布

使用s3.putObject代替s3.client.putObject

const s3 = new AWS.S3();

 s3.putObject({
        Bucket: process.env.BUCKET,
        Key: event.key,
        Body: buffer,
 }).promise()

此外,这个 link 从 URL 上传图像到 s3 对你有帮助:here

经过多次尝试,我终于解决了这个问题。

部分代码如下:

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' 库,而是使用 'request-promise-native' 从 url.

获取流