可以用节点aws-sdk更新文件(最好是csv)吗?

时间:2017-05-17 04:11:50

标签: node.js aws-sdk fs aws-sdk-nodejs

我理解如何读取文件,但我不确定如何创建流来更新文件。基本上,我想在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);
      });
    }
  })

1 个答案:

答案 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将无法重播流。结果是,瞬态网络问题将立即浮现在您的应用程序中,而不是重试请求。