upload/putObject 图像的 AWS Lambda 函数仅适用于本地计算机
AWS Lambda function for upload/putObject image works only on local machine
我有一个 lambda 函数,它使用 'request' 通过 URL 获取文件流,并假设将其上传到 s3 上的存储桶。
它在我的本地机器上使用节点完美运行,但在 lambda 内部运行不正常。
运行使用 lambda 后,我得到了一个空文件,其中包含我想要的名称。
你应该知道的事
- lambda 函数是异步的
- 节点版本为8.10
- 在示例中您看到了 putObject,但我也尝试过上传
- 即使添加 90-120 秒的手动睡眠让 lambda 运行,文件也不会上传
- 我尝试使用context.succeed或回调('some result'),但仍然无法正常工作
这是代码的相关部分
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.
获取流
我有一个 lambda 函数,它使用 'request' 通过 URL 获取文件流,并假设将其上传到 s3 上的存储桶。 它在我的本地机器上使用节点完美运行,但在 lambda 内部运行不正常。 运行使用 lambda 后,我得到了一个空文件,其中包含我想要的名称。
你应该知道的事
- lambda 函数是异步的
- 节点版本为8.10
- 在示例中您看到了 putObject,但我也尝试过上传
- 即使添加 90-120 秒的手动睡眠让 lambda 运行,文件也不会上传
- 我尝试使用context.succeed或回调('some result'),但仍然无法正常工作
这是代码的相关部分
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.
获取流