请原谅我仍在学习。我正在尝试下载一些存储在表中的mp3文件。我可以像这样直接从文件系统下载文件:
if (fs.existsSync(filename)) {
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-Type', 'application/audio/mpeg3');
var rstream = fs.createReadStream(filename);
rstream.pipe(res);
我已经在文档中使用pg-promise示例将数据存储在表中,如下所示:
const rs = fs.createReadStream(filename);
function receiver(_, data) {
function source(index) {
if (index < data.length) {
return data[index];
}
}
function dest(index, data) {
return this.none('INSERT INTO test_bin (utterance) VALUES($1)', data);
}
return this.sequence(source, {dest});
} // end receiver func
rep.tx(t => {
return streamRead.call(t, rs, receiver);
})
.then(data => {
console.log('DATA:', data);
})
.catch(error => {
console.log('ERROR: ', error);
});
但是现在我想从表中取出数据并将其下载到客户端。 docs中从二进制中提取数据的示例将其转换为JSON,然后将其打印到控制台,如下所示:
db.stream(qs, s => {
s.pipe(JSONStream.stringify()).pipe(process.stdout)
})
,并且有效。这样数据就可以从数据库出来了。但我似乎无法将其发送给客户端。看来数据已经是流了,所以我尝试了:
db.stream(qs, s => {
s.pipe(res);
});
但是我遇到类型错误:第一个参数必须是字符串或Buffer
或者,我可以获取该流并将其写入文件系统,然后像上面的第一步一样使用它,但这似乎是一种解决方法。我希望有一个示例,说明如何保存到文档中的文件。
我错过了哪一步?