Обычно я создаю двоичный объект XLSX, загружая данные из MongoDb. Это тогда передано клиенту в ответе http. Это код, который я использую, который отлично работает.
Код серверной стороны:
//Row data (rows) generated from database
conf.rows = rows;
//Only creates Headers from columns in existing data
const data = lib.objectToSheet(conf);
//Create sheet & workbook
const ws = XLSX.utils.aoa_to_sheet(data, {cellDates: true});
const wb = {SheetNames: ["MBS"], Sheets: {MBS: ws}};
const wopts = {bookType: 'xlsx', bookSST: false, type: 'binary', compression:true};
//Create binary data to write to client
const wbout = XLSX.write(wb, wopts);
const fileName = 'FileName.xlsx';
//write workbook to client
request.response.ContentType = "application/file";
request.response.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
request.response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
request.response.end(wbout, 'binary');
Вместо того, чтобы передавать это обратно клиенту, я хочу сохранить двоичный объект (wbout) в виде файла в MongoDb GridFS, чтобы этот файл мог быть загружен клиенту на более позднем этапе.
Я планирую сделать следующее
- создать файл в памяти на сервере. let f = новый FS.File (wbout);
- добавить свойства (имя, размер, данные, тип)
- сохранить файл в монго, используя коллекцию монго
пример на стороне клиента, где файл загружается из элемента управления вводом, я могу получить доступ к той же коллекции монго на сервере для вставки файла.
FS.Utility.eachFile(evt, function (file) {
TempDocuments.insert(file, function (err, fileObject) {
if (err) {
console.log('Error: ', err);
}
});
});
Как мне создать файл из двоичного объекта и сохранить его непосредственно в GridFS?
Нужно ли сначала создавать файл для файловой системы во временную папку или я могу передать его непосредственно в gridFS?