You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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测试步骤

  1. 发起POST请求,地址填http://localhost:3000/upload
  2. 切换到form-data标签,添加键为file的字段,类型选择File,再选择本地文件
  3. 发送请求,响应会返回文件信息,控制台也会打印字节数等数据

注意事项

内存存储仅适合小文件上传,大文件会占用过多内存导致性能问题,这种场景建议先用磁盘存储保存文件,再通过fs.readFileSync()读取文件转成字节数组。

内容的提问来源于stack exchange,提问作者Abheer Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:57:26