从s3获取数据并写入文件后无法从文件读取数据

时间:2019-03-20 14:54:18

标签: node.js amazon-web-services amazon-s3 fs

我正在尝试从s3存储桶中的文件中获取数据并写入临时文件,然后从该临时文件中读取数据。文件已成功创建,临时文件中显示的是html数据,但是当我尝试进行console.log下一步时,它返回空。

 try {   
    ...
    const params = {Bucket: "somebucket", Key: "file.html"}
    let tempFile = fs.createWriteStream("./temp/file.html", 'utf8')
    s3.getObject(params).createReadStream().pipe(tempFile)

    fs.readFile('./temp/file.html', 'utf8', (err, data) => {
        if (err) console.log(err)
        else {
           console.log("cannot get data?") //this shows up
           console.log(data) // this one does not shows up
        }
    })
    ...
} catch {
  ...
}

有人对此有经验吗?

更新

我意识到数据在文件内部,没有getObject()部分就可以很好地输出,但是数据无法显示出来。可能是由于在将数据完全插入文件之前已读取文件。我应该如何更改代码,以便可以在文件中插入的数据完成后延迟readFile的执行。我尝试了setTimeout但失败了。

1 个答案:

答案 0 :(得分:0)

这很可能是由nodejs的异步特性引起的问题。您的函数调用(s3.getObject和fs.readFile)彼此异步运行,因此fs.readFile执行时无法读取任何内容。

您可以通过回调/承诺等待s3.getObject,然后在回调/承诺完成后等待fs.readFile(或直接访问数据对象而不是将其写入文件,具体取决于您的用例),此选项可能更容易)