Как GridFS работает в Метеоре? - PullRequest
0 голосов
/ 27 апреля 2018

Я работаю над приложением, в котором администратор может загрузить расписание (просто файл), а пользователь может загрузить этот загруженный файл. Теперь он работает с функцией загрузки в Meteor, и декодированный файл сохраняется в БД Mongo.

Проблема в том, что я могу загружать только файлы размером около 16 МБ. Я провел некоторое исследование, и, очевидно, вы можете исправить это с помощью GridFS. Я очень новичок в этом, и документация, кажется, не помогает вообще. Может кто-нибудь дать мне простой пример того, как использовать GridFS для решения моей проблемы? Или кто-нибудь порекомендует какие-то другие решения?

Это мой метод UploadSchedule, который я использую для загрузки файла на сервер:

uploadSchedule() {
    if (this.fileListNextMonth == null) {
      this.alertController.create(
        {
          title: "Error",
          subTitle: "Cannot upload file!",
          buttons: ['Ok']
        }
      ).present();
    } else {
      this.fileName = this.fileList[0].name;

      this.getBase64(this.fileList[0]).then(
        data =>
          this.scheduleProvider.uploadSchedule(data, this.fileName, true).then(observable => {
            const subscription = observable.subscribe(data => {
              console.log("data: " + data);
            }, err => console.error(err), () => subscription.unsubscribe());
          })
      );
    }
  }

В моем ScheduleProvider есть метод (uploadSchedule), который отправляет запрос на сервер с определенным файлом. В бэкэнде я просто делаю вставку с загруженным файлом, поэтому он будет сохранен в базе данных в виде строки.

Надеюсь, кто-нибудь может мне помочь.

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2018

Я бы порекомендовал использовать пакет типа https://github.com/VeliovGroup/Meteor-Files, поскольку он хорошо документирован, протестирован и также позволяет использовать другие места, например AWS S3, для хранения файлов.

Вы можете использовать gridfs напрямую. но я бы не рекомендовал это.

Если вы действительно хотите просто сохранить свои файлы в базе данных Mongo, здесь есть хороший пакет: https://github.com/vsivsi/meteor-file-collection, который поможет немного упростить работу.

Я сам использовал оба этих пакета, и они хорошо работают.

Существует также https://github.com/CollectionFS/Meteor-CollectionFS, который является хорошим пакетом, но больше не поддерживается активно. Я считаю, что это сложно использовать.

В вашем коде похоже, что вы конвертируете свой файл в представление base64, что работает, но делает его немного больше исходного файла. На больших файлах это может вызвать некоторые проблемы с производительностью (а также дополнительную память, которая ей нужна).

Я бы порекомендовал хранить ваши изображения или файлы на внешнем сервисе, таком как S3, потому что он выгружает их для извлечения с сервера Meteor, и вы заметите разницу в производительности - это все равно, что использовать CDN для ваших активов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...