Express + MongoDB 实现文件上传

使用 `multer` 中间件来处理文件上传,同时将文件的元数据存储到 MongoDB 中。

一、安装依赖

bash 复制代码
npm install multer

二、核心代码

javascript 复制代码
// 定义文件模型

const fileSchema = new mongoose.Schema({

  originalname: String,

  mimetype: String,

  size: Number,

  path: String,

});

const File = mongoose.model("File", fileSchema);

// 配置 multer

const storage = multer.diskStorage({

  destination: function (req, file, cb) {

    cb(null, "uploads/");

  },

  filename: function (req, file, cb) {

    cb(null, Date.now() + path.extname(file.originalname));

  },

});

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

// 创建上传目录

const fs = require("fs");

if (!fs.existsSync("uploads")) {

  fs.mkdirSync("uploads");

}

// 处理文件上传

app.post("/upload", upload.single("file"), async (req, res) => {

  try {

    const { originalname, mimetype, size, path } = req.file;

    const newFile = new File({

      originalname,

      mimetype,

      size,

      path,

    });

    await newFile.save();

    res.status(200).json({ message: "文件上传成功", file: newFile });

  } catch (error) {

    res.status(500).json({ message: "文件上传失败", error: error.message });

  }

});
相关推荐
不辉放弃38 分钟前
ZooKeeper 是什么?
数据库·大数据开发
Goona_1 小时前
拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统
数据库·python·sql·excel·pyqt
程序员编程指南2 小时前
Qt 数据库连接池实现与管理
c语言·数据库·c++·qt·oracle
幼儿园老大*4 小时前
数据中心-时序数据库InfluxDB
数据库·时序数据库
daixin88484 小时前
Redis过期数据的删除策略是什么?有哪些?
数据库·redis·缓存
陪我一起学编程4 小时前
MySQL创建普通用户并为其分配相关权限的操作步骤
开发语言·数据库·后端·mysql·oracle
Albert Tan5 小时前
ORACLE DATABASE 23AI+Apex+ORDS -纯享版
数据库·oracle
程序员编程指南5 小时前
Qt OpenGL 集成:开发 3D 图形应用
c语言·数据库·c++·qt·3d
婪苏(Python学习ing)6 小时前
MySQL 与 Redis 基础入门:从安装到核心操作
数据库
幻灭行度7 小时前
通过redis_exporter监控redis cluster
数据库·redis·缓存