我有一个运行着Hapi的Node.js服务器。
服务器的其中一项工作是在用户请求时向服务API发送文件(当我发送buffer时,该API只接受streams ,否则会返回错误)。
所有文件都存储在S3中。 如果我使用promise()下载它们,我就可以得到缓冲区。如果我使用createReadStream(),我可以获得passthrough。
我的问题是当我尝试将缓冲区转换为流并将其发送到API时,API会拒绝它,而当我使用createReadStream()的结果时也是如此,但是当我使用FS来保存文件然后再使用FS读取时,API接受流并且起作用。
因此,我需要帮助来找出如何在不保存和读取文件的情况下创建相同的结果。
编辑: 这是我的代码,我知道这种方法是错误的,但它确实有效,我需要一种更好的方法来实现。
服务器的其中一项工作是在用户请求时向服务API发送文件(当我发送buffer时,该API只接受streams ,否则会返回错误)。
所有文件都存储在S3中。 如果我使用promise()下载它们,我就可以得到缓冲区。如果我使用createReadStream(),我可以获得passthrough。
我的问题是当我尝试将缓冲区转换为流并将其发送到API时,API会拒绝它,而当我使用createReadStream()的结果时也是如此,但是当我使用FS来保存文件然后再使用FS读取时,API接受流并且起作用。
因此,我需要帮助来找出如何在不保存和读取文件的情况下创建相同的结果。
编辑: 这是我的代码,我知道这种方法是错误的,但它确实有效,我需要一种更好的方法来实现。
static async downloadFile(Bucket, Key) {
const result = await s3Client
.getObject({
Bucket,
Key
})
.promise();
fs.writeFileSync(`${Path.basename(Key)}`,result.Body);
const file = await fs.createReadStream(`${Path.basename(Key)}`);
return file;
}
file[0] = readStream,file[1] = readStream
。 - Yotav Masafs.writeFileSync(
/${Key},result.Body);
时,它会将你的文件保存在缓冲区数组中,当你运行createReadStream
时,它会将缓冲区转换为FileStream。 - Yousaf