将图像从 S3 存储桶下载到 Lambda 临时文件夹 (Node.js)
Download image from S3 bucket to Lambda temp folder (Node.js)
大家好。
我有一个简单的问题:如何将图像从 S3 存储桶下载到 Lambda 函数临时文件夹进行处理?基本上,我需要将它附加到电子邮件中(我可以在本地测试时这样做)。
我试过:
s3.download_file(bucket, key, '/tmp/image.png')
以及(不确定哪些参数可以帮助我完成工作):
s3.getObject(params, (err, data) => {
if (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}.`;
console.log(message);
callback(message);
} else {
console.log('CONTENT TYPE:', data.ContentType);
callback(null, data.ContentType);
}
});
就像我说的,简单的问题,出于某种原因我找不到解决方案。
谢谢!
可以使用aws s3获取镜像api,然后使用fs写入tmp文件夹。
var params = { Bucket: "BUCKET_NAME", Key: "OBJECT_KEY" };
s3.getObject(params, function(err, data){ if (err) {
console.error(err.code, "-", err.message);
return callback(err); }
fs.writeFile('/tmp/filename', data.Body, function(err){
if(err)
console.log(err.code, "-", err.message);
return callback(err);
});
});
出于好奇,为什么你需要写文件才能附加它?将文件写入磁盘似乎有点多余,这样您就可以从磁盘读取它
如果您直接将其写入文件系统,您也可以 do it with streams。它可能有点 faster/more 内存友好,尤其是在像 Lambda 这样的内存受限环境中。
var fs = require('fs');
var path = require('path');
var params = {
Bucket: "mybucket",
Key: "image.png"
};
var tempFileName = path.join('/tmp', 'downloadedimage.png');
var tempFile = fs.createWriteStream(tempFileName);
s3.getObject(params).createReadStream().pipe(tempFile);
// Using NodeJS version 10.0 or later and promises
const fsPromise = require('fs').promises;
try {
const params = {
Bucket: 's3Bucket',
Key: 'file.txt',
};
const data = await s3.getObject(params).promise();
await fsPromise.writeFile('/tmp/file.txt', data.Body);
} catch(err) {
console.log(err);
}
大家好。
我有一个简单的问题:如何将图像从 S3 存储桶下载到 Lambda 函数临时文件夹进行处理?基本上,我需要将它附加到电子邮件中(我可以在本地测试时这样做)。
我试过:
s3.download_file(bucket, key, '/tmp/image.png')
以及(不确定哪些参数可以帮助我完成工作):
s3.getObject(params, (err, data) => {
if (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}.`;
console.log(message);
callback(message);
} else {
console.log('CONTENT TYPE:', data.ContentType);
callback(null, data.ContentType);
}
});
就像我说的,简单的问题,出于某种原因我找不到解决方案。
谢谢!
可以使用aws s3获取镜像api,然后使用fs写入tmp文件夹。
var params = { Bucket: "BUCKET_NAME", Key: "OBJECT_KEY" };
s3.getObject(params, function(err, data){ if (err) {
console.error(err.code, "-", err.message);
return callback(err); }
fs.writeFile('/tmp/filename', data.Body, function(err){
if(err)
console.log(err.code, "-", err.message);
return callback(err);
});
});
出于好奇,为什么你需要写文件才能附加它?将文件写入磁盘似乎有点多余,这样您就可以从磁盘读取它
如果您直接将其写入文件系统,您也可以 do it with streams。它可能有点 faster/more 内存友好,尤其是在像 Lambda 这样的内存受限环境中。
var fs = require('fs');
var path = require('path');
var params = {
Bucket: "mybucket",
Key: "image.png"
};
var tempFileName = path.join('/tmp', 'downloadedimage.png');
var tempFile = fs.createWriteStream(tempFileName);
s3.getObject(params).createReadStream().pipe(tempFile);
// Using NodeJS version 10.0 or later and promises
const fsPromise = require('fs').promises;
try {
const params = {
Bucket: 's3Bucket',
Key: 'file.txt',
};
const data = await s3.getObject(params).promise();
await fsPromise.writeFile('/tmp/file.txt', data.Body);
} catch(err) {
console.log(err);
}