Загрузите небольшие файлы через тип binData в mongodb

Я хочу загрузить небольшие файлы размером менее 16 МБ в MongoDB через тип BinData, который я узнал, является единственным вариантом по умолчанию для файлов меньшего размера, тогда как GRIDFS идеально подходит для файлов, размер которых превышает 16 МБ.

К сожалению, мне нелегко получить надлежащую документацию и примеры загрузки файлов без GridFS в документации MongoDB. Информация, которую я нашел о типе 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)});
}

Некоторые полезные ссылки:

Типы BSON в Mongo

Спецификация BSON


person Adil    schedule 05.09.2017    source источник
comment
Нет времени запускать экземпляр и тестировать, но согласно README в репозитории, вам нужно получить доступ к нему из MongoInternals и получить прямой доступ к полному импортированному модулю. Не экспортируется на Mongo. В противном случае вы всегда можете потребовать независимый модуль.   -  person Neil Lunn    schedule 05.09.2017
comment
GridFS можно использовать и для файлов меньшего размера, это не ограничение, поскольку она поддерживается напрямую, я бы выбрал это   -  person Mikkel    schedule 05.09.2017
comment
@Mikkel, пожалуйста, поделитесь каким-нибудь примером?   -  person Adil    schedule 06.09.2017
comment
@Mikkel Я нашел очень простой пример здесь (как в option1), но он просто сохраняет BinData(0,"") и ничего не отображает при чтении данных из mongodb.   -  person Adil    schedule 11.09.2017
comment
Я предполагаю, что эти методы возможны, но вы пытаетесь оставаться на низком уровне (по-видимому, вам не нравится использовать пакеты), но вы покупаете себе всевозможные трудности, а не просто используете пакет и продолжаете быть продуктивным. В этом преимущество использования пакетов и причина того, почему npm так популярен.   -  person Mikkel    schedule 11.09.2017
comment
Вы в чем-то правы. Мне нравится использовать популярные пакеты, такие как npm, которые действительно играют большую роль в разработке, но обычно я стараюсь изо всех сил избегать использования нескольких сторонних менее популярных библиотек или модулей в простом приложении или модуле, что может быть легко достигнуто без использования этих библиотек. Я думал, что это будет довольно простая вещь, например, 4-5 строк кода, которые мы используем для сохранения файлов на диск. По этой причине я на самом деле не хочу добавлять дополнительную зависимость всего для 4-5 строк кода.   -  person Adil    schedule 11.09.2017


Ответы (1)


Есть несколько пакетов Meteor, которые вы можете использовать для загрузки файлов.

Я сам использовал его https://atmospherejs.com/vsivsi/file-collection

Он может хранить ваши файлы в gridfs и предоставляет URL-адреса для получения изображений и т. Д.

Также:

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

person Mikkel    schedule 06.09.2017
comment
Итак, функциональность не может быть достигнута без этих сторонних библиотек в meteor mongo, верно? - person Adil; 06.09.2017
comment
Вероятно, может, вы могли бы посмотреть на код и решить, что вам нужно, но гораздо меньше работы использовать пакет, который был опробован и протестирован. - person Mikkel; 06.09.2017