gpt4 book ai didi

node.js - 使用nodejs从lambda触发器调整S3存储桶中的图像大小

转载 作者:搜寻专家 更新时间:2023-10-31 23:58:53 26 4
gpt4 key购买 nike

我是 nodejs 和 aws 的新手,谁能指出以下调整 s3 存储桶中图像大小的代码有什么问题

程序如下

 'use strict';
const AWS = require('aws-sdk');
const S3 = new AWS.S3({
accessKeyId: "xxxxxxxxxxxx",
secretAccessKey: "yyyyyyyyyyy",
region: "us-east-1",
signatureVersion: 'v4',
});

const Sharp = require('sharp');
const BUCKET = "patientimg";
const URL = "https://s3.ap-south-1.amazonaws.com";
exports.handler = function(event, context, callback) {
const key = event.queryStringParameters.key;
const match = key.match(/(\d+)x(\d+)\/(.*)/);
const width = parseInt(match[1], 10);
const height = parseInt(match[2], 10);
const originalKey = match[3];

S3.getObject({Bucket: BUCKET, Key: originalKey}).promise()
.then(data => Sharp(data.Body)
.resize(width, height)
.toFormat('png')
.toBuffer()
)
.then(buffer => S3.putObject({
Body: buffer,
Bucket: BUCKET,
ContentType: "image/png",
Key: key,
}).promise()
)
.then(() => callback(null, {
statusCode: '301',
headers: {'location': "${URL}/${key}"},
body: "",
})
)
.catch(err => callback(err))
}

这是我正在使用的确切代码,使用“S3 put”请求进行测试时 lambda 的输出

  {
"errorMessage": "RequestId: edaddaf7-4c5e-11e7-bed8-13f72aaa5d38 Process exited before completing request"
}

提前致谢

最佳答案

使用 lambda 调整图像大小是一个经典示例,AWS 团队对此进行了很好的解释。听从他们的指示,而不是其他。

https://aws.amazon.com/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/

正确的调整大小代码是:http://github.com/awslabs/serverless-image-resizing .无论您发现什么,都可能是错误的。

基本上它是这样工作的:

  • 上传此代码作为您的 lambda。
  • 转到 lambda 的触发器选项卡并复制 URL
  • 转到您的 s3 存储桶并设置重定向规则:在 404 上,重定向到 lambda URL。图像将根据要求自动调整大小。

上面的 AWS 博客中详细记录了所有这些步骤。他们的方法的好处是在实际需要之前不会创建调整大小的图像,从而节省资源。

关于node.js - 使用nodejs从lambda触发器调整S3存储桶中的图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44434372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com