我理解如何读取文件,但我不确定如何创建流来更新文件。基本上,我想在s3对象上运行以下命令:
fs.writeFileSync('targetFile.csv', new_data, {flag: 'a+'})
上下文是,我有一个包含表单的弹性beanstalk应用程序。提交时,我想捕获一些数据并写入存放在s3存储桶中的文件csv文件。如果有更好的解决方案,我会对此持开放态度。
更新: 这是我的解决方案,但我觉得应该采用更清洁的方式:
const params = {
Bucket: 'BUCKET',
Key: 'file.csv',
}
s3.getObject(params, function(err, data){
if (err) console.log(err, err.stack);
else {
// since I'm adding to csv: add a new line and comma-seperate new values
params.Body = data.Body.toString('utf-8') + '\n additionanal cell1, additional cell2, additionalcell3';
s3.putObject(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
}
})
答案 0 :(得分:0)
您可以像传递缓冲区或字符串一样将流传递给AWS.S3::putObject
:
const S3 = new AWS.S3({region: 'us-west-2'});
s3.putObject({
Bucket: 'bucket',
Key: 'key',
Body: fs.createReadStream('path/to/file'),
});
要记住一件事:如果由于网络问题需要重试请求,AWS SDK将无法重播流。结果是,瞬态网络问题将立即浮现在您的应用程序中,而不是重试请求。