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 });

  }

});
相关推荐
雨落Liy3 分钟前
SQL 函数从入门到精通:原理、类型、窗口函数与实战指南
数据库·sql
Kt&Rs1 小时前
MySQL复制技术的发展历程
数据库·mysql
小小菜鸡ing1 小时前
pymysql
java·服务器·数据库
手握风云-1 小时前
MySQL数据库精研之旅第十六期:深度拆解事务核心(上)
数据库·mysql
boonya2 小时前
Redis核心原理与面试问题解析
数据库·redis·面试
沙二原住民2 小时前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle
三毛20042 小时前
玳瑁的嵌入式日记D33-0908(SQL数据库)
jvm·数据库·sql
叫我龙翔2 小时前
【MySQL】从零开始了解数据库开发 --- 库的操作
数据库·mysql·数据库开发
没有bug.的程序员3 小时前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
GottdesKrieges3 小时前
OceanBase容量统计:租户、数据库、表大小
数据库·oceanbase