【发布时间】:2019-08-11 07:47:56
【问题描述】:
我正在尝试从 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 但失败了。
【问题讨论】:
-
不,数据在文件里面,所以getObject部分是成功的。也许我需要在 getObject 部分完成后延迟 readFile 的执行。
-
我尝试在不使用 pipe() 的情况下使用 getObject,它确实显示了数据,但它没有创建文件,因为 createReadStream 和 createWriteStream 已被删除。我想要的是先获取数据并保存到本地文件,然后使用该文件作为数据源进一步进行。
标签: node.js amazon-web-services amazon-s3 fs