如何在Node.js中上传文件并将其转为字节数组
解决Express + Multer获取文件字节数组的问题
核心思路
默认Multer会把文件保存到磁盘,要直接拿到字节数组,得改用内存存储引擎——让文件暂存到内存中,通过req.file.buffer就能获取等价于字节数组的Buffer对象(Node.js中Buffer就是字节数据的封装形式)。
完整实现代码
1. 安装依赖
npm install express multer
2. 编写Express服务代码
const express = require('express'); const multer = require('multer'); const app = express(); // 配置Multer使用内存存储,不生成本地文件 const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); // 处理单文件上传的路由,字段名'file'对应Postman里的form-data字段名 app.post('/upload', upload.single('file'), (req, res) => { if (!req.file) { return res.status(400).send('请选择要上传的文件'); } // 获取文件字节数组(Buffer直接等价于字节数组,可直接操作) const fileBytes = req.file.buffer; // 这里可对字节数组做任意处理:转Base64、存入数据库、调用其他服务等 console.log(`文件字节数:${fileBytes.length}`); console.log(`文件类型:${req.file.mimetype}`); console.log(`原始文件名:${req.file.originalname}`); res.json({ status: 'success', fileInfo: { filename: req.file.originalname, size: fileBytes.length, mimetype: req.file.mimetype } }); }); app.listen(3000, () => { console.log('服务运行在 http://localhost:3000'); });
关键细节说明
multer.memoryStorage():禁用磁盘写入,将文件数据暂存到内存Buffer中,避免生成本地文件。req.file.buffer:对应你需要的字节数组,和Spring Boot中MultipartFile.getBytes()的效果完全一致,Node.js中Buffer可直接转成普通数组(Array.from(fileBytes))或Base64字符串(fileBytes.toString('base64'))。- 多文件处理:如果需要上传多个文件,把
upload.single('file')改成upload.array('files', 5)(最多5个文件),然后遍历req.files数组,每个元素的buffer属性就是对应文件的字节数组。
Postman测试步骤
- 发起POST请求,地址填
http://localhost:3000/upload - 切换到
form-data标签,添加键为file的字段,类型选择File,再选择本地文件 - 发送请求,响应会返回文件信息,控制台也会打印字节数等数据
注意事项
内存存储仅适合小文件上传,大文件会占用过多内存导致性能问题,这种场景建议先用磁盘存储保存文件,再通过fs.readFileSync()读取文件转成字节数组。
内容的提问来源于stack exchange,提问作者Abheer Patil
相关产品推荐
相关产品推荐

