如何通过Multer结合Fastify实现文件上传至Cloudinary
使用Multer + Fastify 实现文件上传至Cloudinary
1. 初始化项目并安装依赖
先创建并初始化Node.js项目,然后安装所需依赖:
npm init -y npm install fastify multer cloudinary multer-storage-cloudinary @fastify/middie
2. 配置Cloudinary
创建配置文件(比如cloudinary.config.js),填入你的Cloudinary账户信息:
const cloudinary = require('cloudinary').v2; cloudinary.config({ cloud_name: '你的Cloudinary云名称', api_key: '你的API密钥', api_secret: '你的API密钥密码' }); module.exports = cloudinary;
3. 配置Multer存储引擎
使用multer-storage-cloudinary创建Cloudinary存储实例,替代本地存储:
const multer = require('multer'); const { CloudinaryStorage } = require('multer-storage-cloudinary'); const cloudinary = require('./cloudinary.config'); const storage = new CloudinaryStorage({ cloudinary: cloudinary, params: { folder: 'fastify-uploads', // 上传到Cloudinary的目标文件夹 allowed_formats: ['jpg', 'png', 'webp', 'gif'], // 允许的文件格式 // 可选:自定义文件名逻辑 filename: (req, file, cb) => { cb(null, `${Date.now()}-${file.originalname}`); } } }); const upload = multer({ storage: storage }); module.exports = upload;
4. 启用Fastify的中间件支持
Fastify默认不兼容Express风格中间件,需通过@fastify/middie插件启用:
const fastify = require('fastify')({ logger: true }); // 注册middie插件 async function setupPlugins() { await fastify.register(require('@fastify/middie')); } setupPlugins();
5. 编写上传路由
创建POST路由,用Multer中间件处理文件上传,返回Cloudinary的上传结果:
const upload = require('./multer.config'); // 单文件上传接口 fastify.post('/upload', { preHandler: upload.single('file') }, async (req, reply) => { // req.file包含Cloudinary返回的完整文件元数据 return reply.send({ success: true, fileInfo: { url: req.file.path, filename: req.file.filename, size: req.file.size } }); }); // 多文件上传接口(最多5个文件) fastify.post('/upload-multiple', { preHandler: upload.array('files', 5) }, async (req, reply) => { const fileList = req.files.map(file => ({ url: file.path, filename: file.filename })); return reply.send({ success: true, files: fileList }); }); // 启动服务器 fastify.listen({ port: 3000 }, (err) => { if (err) { fastify.log.error(err); process.exit(1); } fastify.log.info(`服务器运行在 http://localhost:3000`); });
6. 测试上传
用curl命令测试单文件上传:
curl -X POST -F "file=@/本地文件路径/xxx.jpg" http://localhost:3000/upload
也可以用Postman发送POST请求,选择form-data类型,键名设为file(或files对应多文件接口),值选择本地文件。
内容的提问来源于stack exchange,提问作者Hassaan Haider .Dev
相关产品推荐
相关产品推荐

