通常我通过从 MongoDb 加载数据来创建 XLSX 二进制对象。然后通过 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 中的文件,以便以后可以将该文件下载到客户端。
我打算做以下事情
- 在服务器的内存中创建一个文件。让 f = new FS.File(wbout);
- 添加属性(名称、大小、数据、类型)
- 使用 mongo 集合将文件保存到 mongo
从输入控件加载文件的客户端示例,我可以访问服务器上的相同 mongo 集合以插入文件。
FS.Utility.eachFile(evt, function (file) {
TempDocuments.insert(file, function (err, fileObject) {
if (err) {
console.log('Error: ', err);
}
});
});
如何从二进制对象创建文件并将其直接保存到 GridFS?
我是否需要先将文件系统的文件创建到临时位置,还是可以直接将其流式传输到 gridFS?