gpt4 book ai didi

javascript - 将二进制对象保存到服务器上的 GridFS

转载 作者:行者123 更新时间:2023-12-03 00:23:35 25 4
gpt4 key购买 nike

通常我通过从 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 中的文件,以便稍后可以将该文件下载到客户端。

我计划执行以下操作

  1. 在服务器内存中创建一个文件。让 f = new FS.File(wbout);
  2. 添加属性(名称、大小、数据、类型)
  3. 使用 mongo 集合将文件保存到 mongo

客户端示例,其中文件从输入控件加载,我可以访问服务器上相同的 mongo 集合以插入文件。

 FS.Utility.eachFile(evt, function (file) {
TempDocuments.insert(file, function (err, fileObject) {
if (err) {
console.log('Error: ', err);
}
});
});

如何从二进制对象创建文件并将其直接保存到 GridFS?

我是否需要先在文件系统的临时位置创建一个文件,还是可以直接将其流式传输到 gridFS?

最佳答案

感谢 Agniva 在此发布的帖子 ( https://agniva.me/meteor/2016/04/25/meteor-arraybuffer.html ),您可以执行以下操作:

 let buffer = new Buffer(wbout, "binary");
let file = new FS.File();
file.name(fileName);
file.extension('xlsx');
file.attachData(buffer, {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'});

if(file){
//save wbout in gridfs
TempDocuments.insert(file, function (err, fileObject) {
console.log(err, fileObject);
})
} else {
console.log('nofile');
}

唯一的缺点是该文件创建了一个随机名称。不确定这是否可以在任何地方指定。

编辑:可以像上面的示例一样设置文件属性源:https://github.com/CollectionFS/Meteor-CollectionFS/wiki/FS.File

关于javascript - 将二进制对象保存到服务器上的 GridFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com