хотите знать, как использовать Gridfs для загрузки файлов / видео размером более 16 МБ с помощью express, mongoose, mongodb

#node.js #reactjs #mongodb #express #mongoose-schema

#node.js #reactjs #mongodb #экспресс #mongoose-схема

Вопрос:

это мой код, который отлично работает при загрузке изображения, но всякий раз, когда я собираюсь загружать видео / файлы размером более 16 МБ, его не удалось загрузить, так что что делать, пожалуйста, помогите, я новичок! Я использую грозный в качестве промежуточного программного обеспечения, Lodash и fs, но не знаю, что делать дальше

 const Freecoursevideo = require("../models/freecoursevideo");
const formidable = require("formidable");
const _ = require("lodash");
const fs = require("fs");


exports.createFreecoursevideo = (req, res) => {
  let form = new formidable.IncomingForm();
  form.keepExtensions = true;

  form.parse(req, (err, fields, file) => {
    if (err) {
      return res.status(400).json({
        error: "problem with image",
      });
    }
    //destructure the fields
    const { name, description } = fields;

    if (!name || !description) {
      return res.status(400).json({
        error: "Please include all fields",
      });
    }

    let freecoursevideo = new Freecoursevideo(fields);
    console.log(freecoursevideo);
    //handle file here
    if (file.video) {
      if (file.video.size > 1000000000000000000000) {
        return res.status(400).json({
          error: "File size too big!",
        });
      }
      freecoursevideo.video.data = fs.readFileSync(file.video.path);
      freecoursevideo.video.contentType = file.video.type;
    }

    // console.log(freecoursevideo);

    //save to the DB
    freecoursevideo.save((err, freecoursevideo) => {
      if (err) {
        res.status(400).json({
          error: "Saving Freecoursevideo in DB failed",
        });
      }
      res.json(freecoursevideo);
    });
  });
};
  

Комментарии:

1. Было бы неплохо просмотреть журналы ошибок при попытке загрузить изображение определенного размера. Это больше похоже на проблему локальной конфигурации, чем на реальную проблему с кодом.

2. Какую версию mongo вы используете?

3. Максимальный размер 1000000000000000000000 (который составляет 100 байт Exa)? Представьте, что вы бы скопировали такое видео на стопку DVD. Это создало бы стопку от Земли до Луны. Лучше использовать более реалистичный размер 10e9 , например, 10 ГБ

Ответ №1:

Mongodb имеет ограничение в 16 МБ на размер документа, который вы можете сохранить в коллекции.

Поскольку вы пытаетесь сохранить видео размером более 16 Мб в свою freecoursevideo коллекцию, вы получаете сообщение об ошибке.

Решение:-

Вам нужно будет Gridfs сохранять документы размером более 16 МБ.

В вашем случае я бы посоветовал вам избавиться от freecoursevideo коллекции и сохранить все ваши видео gridfs , независимо от того, превышает ли оно 16 МБ или нет. Так что вам не придется запрашивать два места для получения ваших видео.

Итак, как сохранить в gridfs?

  • Для начала просто попробуйте поместить несколько видео с помощью mongoshell. Просто перейдите в bin папку с вашими инструментами базы данных mongo.

Убедитесь, что в bin папке содержится следующее содержимое.

введите описание изображения здесь

  • Откройте командную строку в этом месте. Выполните приведенную ниже команду, заменив , , <DB_NAME> и <PATH_TO_VIDEO>

    mongofiles --host=<HOST> --port=<PORT> -d=<DB_NAME> put <PATH_TO_VIDEO>

  • Приведенная выше команда сохранит видео в fs.files fs.chunks коллекции и. Названия этих коллекций предопределены mongo и не могут быть изменены.

  • Приведенное выше упражнение поможет вам понять, как работает gridfs. Тогда вы можете идти дальше и искать мангустский способ сделать это. Добавление ссылки на статью, которая может помочь.

    https://www.freecodecamp.org/news/gridfs-making-file-uploading-to-mongodb/

Комментарии:

1. Спасибо… Можете ли вы принять ответ, если он был полезен?

2. да, это полезно, большое спасибо, но все еще не понимаю, как я могу это сделать с node.js/express.js ,, если вы знаете, пожалуйста, поделитесь своими знаниями, сэр,

3. Вы читали эту статью, которой я поделился. freecodecamp.org/news/gridfs-making-file-uploading-to-mongodb