#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