1

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

1 回答 1

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 开发工具包将无法重播流。结果是暂时的网络问题将立即出现在您的应用程序中,而不是重试请求。

于 2017-05-17T17:17:37.143 回答