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

1 つ注意してください。ネットワークの問題のためにリクエストを再試行する必要がある場合、AWS SDK はストリームを再生できません。結果として、一時的なネットワークの問題は、リクエストが再試行されるのではなく、すぐにアプリケーションに表示されます。

于 2017-05-17T17:17:37.143 に答える