【问题标题】:possible to update a file (csv preferably) with node aws-sdk?可以使用节点 aws-sdk 更新文件(最好是 csv)吗?
【发布时间】:2017-05-19 11:50:48
【问题描述】:

我了解如何读取文件,但我不确定如何创建流来更新文件。本质上,我想在 s3 对象上运行以下命令:

fs.writeFileSync('targetFile.csv', new_data, {flag: 'a+'})

上下文是,我有一个包含表单的弹性 beanstalk 应用程序。提交时,我想捕获一些数据并写入文件 csv 文件,该文件位于 s3 存储桶中。如果有更好的方法解决方案,我愿意接受。

更新: 这是我的解决方案,但我觉得应该有更清洁的方法:

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);
      });
    }
  })

【问题讨论】:

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


    【解决方案1】:

    您可以像传递缓冲区或字符串一样将流传递给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 开发工具包将无法重播流。结果是暂时的网络问题将立即出现在您的应用程序中,而不是重试请求。

    【讨论】:

    • 我遇到的问题是我要更新的文件存在于 s3 上,所以我不相信我有路径。抱歉,我没有详细描述,但我最终将 putObject 嵌套在 getObject 中(见上文)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2018-05-22
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多