Простите, я все еще учусь.Я пытаюсь загрузить некоторые 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-обещания в документах, например:
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);
});
НоТеперь я хочу взять эти данные из таблицы и загрузить их клиенту.Пример в документации по извлечению данных из двоичного файла преобразует их в JSON, а затем выводит их на консоль следующим образом:
db.stream(qs, s => {
s.pipe(JSONStream.stringify()).pipe(process.stdout)
})
, и это работает.Таким образом, данные поступают из базы данных в порядке.Но я не могу отправить его клиенту.Кажется, что данные уже являются потоком, поэтому я попытался:
db.stream(qs, s => {
s.pipe(res);
});
Но я получил ошибку типа: первый аргумент должен быть строкой или буфером
В качестве альтернативы, я мог бы взять этот потоки запишите его в файловую систему, а затем обслужите его, как описано выше, но это выглядит как обходной путь.Я хотел бы, чтобы был пример того, как сохранить в файл в документах.
Какой шаг я пропускаю?