У меня есть несколько документов Excel (xlsx), сохраненных в MongoDB в двоичном формате.Я хотел бы, чтобы node.js извлекал файл из базы данных, когда пользователь переходит на URL, и предоставляет файл для загрузки пользователем.Я успешно загружаю файл a , но при попытке открыть файл получаю сообщение об ошибке Excel:
"Excel не может открыть файл '5beec8ef3cf3e70b5ce8972e.xlsx'потому что формат файла или расширение файла недопустимо. Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла. "
Файл также сохраняется с 0 байтами.Я думаю, что я не правильно конвертирую данные из MongoDB, прежде чем пытаться создать буфер.Вот мой сценарий:
app.get('//downloadReport/:id', (req, res) => {
dbo = db.db('test');
dbo.collection("reports").findOne(
{'_id': mongodb.ObjectId(req.params.id)}
).then(doc => {
console.log('type of doc.file: ' + typeof doc.file);
// returns:
// type of doc.file: object
console.log(doc.file);
// returns:
// Binary {
// _bsontype: 'Binary',
// sub_type: 0,
// position: 1146504,
// buffer: <Buffer 50 4b 03 04 14 00 00 00 08 00 12 66 6f 4d f8 64 19 ... > }
res.writeHead(200, [['Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']]);
// This one doesn't work
// res.end(doc.file, 'binary');
// returns:
// TypeError: First argument must be a string or Buffer
res.end(new Buffer(doc.file, 'binary') );
});
});
Я пробовал свернуть до doc.file.Binary.buffer
, но я получаю сообщение о том, что doc.file.Binary
не определено.
Я также хочу скачать файлс правильным именем файла.Я пытался добавить это к writeHead
:
['Content-disposition', 'filename=' + doc.filename]
, но я получаю ошибку в Chrome: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
Кто-нибудь знает, как заставить это работать?Заранее спасибо!