nodejs express框架+multer+mongodb数据库中实现视频上传

1、安装好 nodejs 和 express +multer+mongodb

2、这是我的结构

3、在model文件夹下的db,js连接地址后面添加

{ useNewUrlParser: true, useUnifiedTopology: true }

4、 在model文件夹下的model.js文件配置模型

const VideoSchema = new mongoose.Schema({

  title: String,

  path: String,

});

5、在根目录app.js中配置导入

var multer = require('multer');

注意要配置跨域

const storage = multer.diskStorage({

  destination: (req, file, cb) => {

    cb(null, 'upload/video')//保存视频位置

  },

  filename: (req, file, cb) => {

    cb(null, file.fieldname + '-' + Date.now() + '.mp4')

  }

})

const upload = multer({ storage: storage });

6、 需要在routes文件下配置接口,默认是index.js我这边是home.js

//在文件夹需要导入

const multer = require('multer');

const upload = multer({ dest: 'upload/' })//视频保存地址

//导入定义好的模型文件

//视频接口配置

router.post('/upload', upload.single('video'), async (req, res) => {

  try {

    const { originalname, path } = req.file;

    const video = new VideoModel({

      title: originalname,

      path: path,

    });

    await video.save();

    res.status(201).send('Video uploaded successfully!');

  } catch (error) {

    res.status(500).send(error.message);

  }

});

//前端实现视频上传。我这里使用的是umi2 进行上传操作 ,axios我进行了二次封装没有封装正常导入即可!

import React, { useState } from 'react';
import { Upload, Button, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
import axios from '../../../../../axios/index';

const UploadPage = () => {
  const [fileList, setFileList] = useState([]);

  const onChange = (info) => {
    let fileList = [...info.fileList];

    // 限制文件上传数量
    fileList = fileList.slice(-1);

    setFileList(fileList);
  };

  const beforeUpload = (file) => {
    // 自定义文件类型和大小的限制
    const isVideo = file.type.startsWith('video/');
    if (!isVideo) {
      message.error('只能上传视频文件!');
    }
    const isLt2M = file.size / 1024 / 1024 < 100;
    if (!isLt2M) {
      message.error('视频文件大小不能超过100MB!');
    }
    return isVideo && isLt2M;
  };

  const customRequest = async ({ file, onSuccess, onError }) => {
    try {
      const formData = new FormData();
      formData.append('video', file);

      const response = await axios.post('/home/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data',
        },
      });

      if (response.status === 201) {
        message.success('视频上传成功!');
        onSuccess();
      } else {
        message.error('视频上传失败!');
        onError();
      }
    } catch (error) {
      message.error('视频上传失败!');
      onError();
    }
  };

  return (
    <div>
      <Upload
        customRequest={customRequest}
        showUploadList={false}
        beforeUpload={beforeUpload}
        onChange={onChange}
        fileList={fileList}
      >
        <Button icon={<UploadOutlined />}>选择视频</Button>
      </Upload>
    </div>
  );
};

export default UploadPage;

Node.js是一个基于Chrome V8 JavaScript引擎的JavaScript运行环境,可用于服务器端编程。Express是一个基于Node.js平台的Web应用开发框架,提供了简单易用的API,可以快速构建Web应用程序。Mongoose是一个优秀的Node.js模块,用于连接MongoDB数据库,并提供了丰富的API来操作MongoDB数据库。 下面是使用Node.jsExpress、Mongoose操作MongoDB的基本流程: 1. 安装Node.jsExpress和Mongoose 在终端执行以下命令: ``` npm install node npm install express npm install mongoose ``` 2. 连接MongoDB数据库 在app.js或server.js文件,使用Mongoose连接MongoDB数据库: ``` var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); ``` 3. 定义数据模型 在models目录下创建一个JavaScript文件,使用Mongoose定义数据模型: ``` var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ name: String, age: Number, email: String }); module.exports = mongoose.model('User', UserSchema); ``` 4. 实现API接口 在routes目录下创建一个JavaScript文件,实现API接口: ``` var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.get('/users', function(req, res, next) { User.find(function(err, users) { if (err) return next(err); res.json(users); }); }); router.post('/users', function(req, res, next) { var user = new User(req.body); user.save(function(err) { if (err) return next(err); res.json(user); }); }); router.get('/users/:id', function(req, res, next) { User.findById(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); router.put('/users/:id', function(req, res, next) { User.findByIdAndUpdate(req.params.id, req.body, function(err, user) { if (err) return next(err); res.json(user); }); }); router.delete('/users/:id', function(req, res, next) { User.findByIdAndRemove(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); module.exports = router; ``` 5. 启动Express应用 在app.js或server.js文件启动Express应用: ``` var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var userRoute = require('./routes/user'); app.use(bodyParser.json()); app.use('/api', userRoute); app.listen(3000, function() { console.log('Server listening on port 3000'); }); ``` 6. 测试API接口 通过Postman等工具测试API接口。例如: - GET http://localhost:3000/api/users - POST http://localhost:3000/api/users - GET http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - PUT http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - DELETE http://localhost:3000/api/users/5f3e7003c3e1c12345678901 这样就完成了使用Node.jsExpress、Mongoose操作MongoDB的基本流程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值