【问题标题】:Upload small files via binData type in mongodbmongodb中通过binData类型上传小文件
【发布时间】:2018-02-13 17:00:56
【问题描述】:

我想通过BinData type 将小于16MB 的小文件上传到MongoDB,我知道这是小文件的唯一默认选项,而GRIDFS 最适合用于大小超过16MB 的文件。

不幸的是,我没有在MongoDB docs 上轻松获得正确的文档和不使用 GridFS 上传文件的示例。我找到的有关 BinData 类型的信息要么非常有限,要么我无法理解。在这里(主要基于python)和其他地方经历了几个类似的问题,我对 BinData 的使用有了一些了解,但我仍然无法以这种方式成功上传文件。

我需要更多关于通过BinData 上传文件的信息,尤其是正确的初始化方法,因为我通常会收到BinData not a functionBinData 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)});
}

一些有用的链接:

BSON Types in Mongo

BSON spec

【问题讨论】:

  • 没有时间启动实例和测试,但根据README in the repo,您需要从MongoInternals 访问它,并直接访问完整导入的模块。它不会在Mongo 上导出。如果你不能总是需要独立模块。
  • GridFS 也可以用于较小的文件,这不是限制,因为它是直接支持的,我会选择它
  • @Mikkel 你能分享任何例子吗?
  • @Mikkel 我找到了一个非常简单的例子here (as in option1),但它只是保存了BinData(0,""),并且在从mongodb读取数据时什么也不显示。
  • 我想这些技术是可能的,但是你试图保持低水平(大概你不喜欢使用包),但是你给自己买了各种各样的困难而不是仅仅使用一个包和继续保持生产力。这就是使用包的好处,也是 npm 如此受欢迎的原因

标签: node.js mongodb meteor file-upload bson


【解决方案1】:

有几个 Meteor 包可用于文件上传。

我自己用过这个https://atmospherejs.com/vsivsi/file-collection

它可以将您的文件存储在gridfs中,并提供用于检索图像等的url

还有:

https://atmospherejs.com/jalik/ufs https://atmospherejs.com/ostrio/files

【讨论】:

  • 所以没有meteor mongo中的这些第三方库就无法实现功能吧?
  • 应该可以,看代码就知道需要什么了,但是用一个已经试用过的包,工作量少很多
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多