【发布时间】:2018-02-13 17:00:56
【问题描述】:
我想通过BinData type 将小于16MB 的小文件上传到MongoDB,我知道这是小文件的唯一默认选项,而GRIDFS 最适合用于大小超过16MB 的文件。
不幸的是,我没有在MongoDB docs 上轻松获得正确的文档和不使用 GridFS 上传文件的示例。我找到的有关 BinData 类型的信息要么非常有限,要么我无法理解。在这里(主要基于python)和其他地方经历了几个类似的问题,我对 BinData 的使用有了一些了解,但我仍然无法以这种方式成功上传文件。
我需要更多关于通过BinData 上传文件的信息,尤其是正确的初始化方法,因为我通常会收到BinData not a function 或BinData is not defined 错误。这是我正在测试功能的当前代码:
import { Meteor } from "meteor/meteor";
import { Mongo } from "meteor/mongo";
export const Attachment = new Mongo.Collection("attachment");
let BinData = Mongo.BinData; //wrong initialisation
function createAttachment(fileData) {
const data = new Buffer(fileData, "base64");
Attachment.insert({file: new BinData(0, data)});
}
一些有用的链接:
【问题讨论】:
-
没有时间启动实例和测试,但根据README in the repo,您需要从
MongoInternals访问它,并直接访问完整导入的模块。它不会在Mongo上导出。如果你不能总是需要独立模块。 -
GridFS 也可以用于较小的文件,这不是限制,因为它是直接支持的,我会选择它
-
@Mikkel 你能分享任何例子吗?
-
@Mikkel 我找到了一个非常简单的例子here (as in option1),但它只是保存了
BinData(0,""),并且在从mongodb读取数据时什么也不显示。 -
我想这些技术是可能的,但是你试图保持低水平(大概你不喜欢使用包),但是你给自己买了各种各样的困难而不是仅仅使用一个包和继续保持生产力。这就是使用包的好处,也是 npm 如此受欢迎的原因
标签: node.js mongodb meteor file-upload bson