Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 想知道,如何使用Gridfs在中使用express、mongoose、mongodb上传超过16mb的文件/视频_Node.js_Reactjs_Mongodb_Express_Mongoose Schema - Fatal编程技术网

Node.js 想知道,如何使用Gridfs在中使用express、mongoose、mongodb上传超过16mb的文件/视频

Node.js 想知道,如何使用Gridfs在中使用express、mongoose、mongodb上传超过16mb的文件/视频,node.js,reactjs,mongodb,express,mongoose-schema,Node.js,Reactjs,Mongodb,Express,Mongoose Schema,这是我的代码,上传图像时效果很好,但每当我要上传超过16mb的视频/文件时,它都无法上传,所以怎么办,请帮助,我是初学者! 我使用了强大的中间件lodash和fs,但不知道下一步该怎么做 const Freecoursevideo = require("../models/freecoursevideo"); const formidable = require("formidable"); const _ = require("lodash&q

这是我的代码,上传图像时效果很好,但每当我要上传超过16mb的视频/文件时,它都无法上传,所以怎么办,请帮助,我是初学者! 我使用了强大的中间件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);
    });
  });
};

Mongodb对可以保存到集合中的文档大小有16MB的限制

由于您试图将大于16mb的视频保存到您的
freecoursevideo
收藏中,因此出现了一个错误

解决方案:-

您必须
Gridfs
才能保存大于16mb的文档

对于您的情况,我建议您删除
freecoursevideo
收藏,并将所有视频保存在
gridfs
中,无论其是否超过16mb。这样你就不必查询两个地方来获取视频

那么如何保存到gridfs?

  • 首先,尝试使用mongoshell播放一些视频。只需导航到mongo数据库工具的
    bin
    文件夹
确保
bin
文件夹包含以下内容

  • 在此位置打开命令提示符。通过替换,运行以下命令, 及

    mongofiles--host=--port=-d=put

  • 上述命令将视频保存在
    fs.files
    fs.chunks
    集合中。这些集合的名称由mongo预定义,不能更改

  • 以上练习将帮助您了解gridfs的工作原理。然后你可以继续寻找猫鼬做这件事的方法。添加到文章的链接可能会有所帮助


当您尝试上传超过一定大小的图像时,最好能看到任何错误日志。这听起来更像是本地配置问题,而不是实际的代码问题。您使用的是哪个版本的mongo?最大大小为
1000000000000000000
(100 Exa字节)?想象一下,你会把这样一段视频撕成一堆DVD。它将创造一个从地球到月球的堆栈。最好使用更真实的尺寸,如
10e9
,即10GBThanks…如果答案有用,你能接受吗?是的,它很有用,非常感谢,但仍然不明白如何使用node.js/express.js实现这一点,如果你知道,请剪切你的知识,先生,你读过我共享的这篇文章吗。