Хобрук: Ваш путь к мастерству в программировании

Как хранить большие файлы с помощью Meteor?

Я создаю приложение Meteor (meteorjs), которое должно хранить и отображать файлы PDF, иногда размером до 500 МБ. GridFS, похоже, еще не интегрирован, поэтому мне интересно, стоит ли в этом случае использовать Meteor или придерживаться Rails.

В идеале я бы не использовал S3 — я бы хотел хранить файлы на своем сервере.

ОБНОВЛЕНИЕ: кажется, что можно напрямую подключиться за пределами Meteor, мне не нужно автоматически перемещать PDF-файлы - и, вероятно, это не имеет смысла.

В частности, я сейчас смотрю на: MongoDB -> ElasticSearch с использованием https://github.com/richardwilly98/elasticsearch-river-mongodb

Используя инструкции на https://github.com/richardwilly98/elasticsearch-river-mongodb/wiki

30.07.2014

  • Я бы сказал, вам нужно будет реализовать хранилище файлов так же, как вы сделали бы это в обычном узле, добавив обработчик соединения в WebApp.connectHandlers 31.07.2014
  • Вы пробовали collectionFS с файловой системой cfs? 31.07.2014
  • @ theo3335796 theo3335796 Спасибо - у меня было, но я предпочитаю не использовать что-то с таким большим предупреждением вверху. Я знаю, что Meteor тоже экспериментальный, но выглядит НАМНОГО стабильнее. ПРИМЕЧАНИЕ. В настоящее время этот пакет находится в активной разработке (31 марта 2014 г.). В нем есть ошибки, и API может продолжать меняться. Пожалуйста, помогите протестировать его и исправить ошибки, но пока не используйте его в производстве. imslavko - возможно, вы правы, разбираясь в этом сейчас. 31.07.2014
  • @user1431782 user1431782 на самом деле я использую GridFs в 2 приложениях, и это работает очень хорошо 13.01.2015

Ответы:


1

Вы можете использовать GridFS внутри метеора, не касаясь дополнительных пакетов.

var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db; //grab the database object
var GridStore = MongoInternals.NpmModule.GridStore;


WebApp.connectHandlers.use('/someurl', function(req, res) {
  var bigFile = new GridStore(db, 'bigfile.iso', 'r') //to read
  bigFile.open(function(error, result) {

    if (error) return

    bigFile.stream(); //stream the file
    bigFile.on('error', function(e) {...}) //handle error etc
    bigFile.on('end', function() {bigFile.close();}); //close the file when done

    bigFile.pipe(res); //pipe the file to res
  });
});

Однако текущий GridStore/mongo (v1.3.x), используемый Meteor, немного устарел, самая новая версия — 2.x из http://mongodb.github.io/node-mongodb-native/2.0/api-docs/ Похоже, v1.x плохо работает, поэтому вам может понадобиться использовать более новую версию

Второй вариант

var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db; //grab the database object
var GridStore = Npm.require('mongodb').GridStore; //add Npm.depends({mongodb:'2.0.13'}) in your package.js

WebApp.connectHandlers.use('/someurl', function(req, res) {
    var bigFile = new GridStore(db, 'bigfile.iso', 'r').stream(true); //the new API doens't require bigFile.open() and will close automatically on end
    bigFile.on('error', function(e) {...}); //handle error etc
    bigFile.on('end', function() {...});
    bigFile.pipe(res); //pipe the file to res
});

В этом примере я использую WebApp.connectHandlers, но вы, конечно, можете использовать железо: роутер или что-то в этом роде. Я попробовал с файлом размером 500 МБ, и все идет хорошо. Вам также необходимо установить res.writeHead(200) и другие вещи, такие как тип содержимого и т.д.

13.01.2015
Новые материалы

Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

Универсальный базовый доход
Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

Абсолютно имеет смысл.
Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

МАШИННОЕ ОБУЧЕНИЕ И EDA
Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

В чем основные различия между ReactJS и React-Native?
В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

LeetCode — Умножение строк
Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..