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

  }

});
相关推荐
小丁爱养花6 小时前
Redis 内部编码/单线程模型/string
数据库·redis·缓存·1024程序员节
l1t6 小时前
利用DuckDB SQL求解集合数学题
数据库·sql·算法·集合·duckdb
筵陌6 小时前
MYSQL表的操作
数据库·mysql·1024程序员节
一 乐6 小时前
汽车销售|汽车推荐|基于SprinBoot+vue的新能源汽车个性化推荐系统(源码+数据库+文档)
java·数据库·vue.js·汽车·毕设·汽车个性化推荐
虾说羊7 小时前
最细Maven教程以及Maven私服搭建
java·数据库·maven
RestCloud7 小时前
Kingbase与ETL:如何实现金融级数据库的安全数据同步
数据库
ajassi20007 小时前
开源 Linux 服务器与中间件(八)数据库--MariaDB
服务器·数据库·开源
华仔啊8 小时前
这20条SQL优化方案,让你的数据库查询速度提升10倍
数据库·后端·mysql
赵庆明老师8 小时前
C# 结合Redis Cache 访问MySQL数据库
数据库·redis·c#
IvorySQL8 小时前
为IvorySQL增添PACKAGE语法帮助
数据库·postgresql