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

如何将NestJS中Multer上传的文件直接转为ReadableStream?

直接将Multer上传的Buffer转为ReadableStream(无需写入磁盘)

你已经通过Multer拿到了内存中的文件Buffer(file.buffer),完全不需要写入磁盘再读取,直接用Node.js内置的stream.Readable就能把Buffer转换成可读流。

实现步骤:

  1. 导入Node.js的Stream模块
    在你的Service文件顶部引入Readable:
import { Readable } from 'stream';
  1. 将Buffer转为ReadableStream
    在Service的create方法里,直接用Readable.from()包装文件Buffer:
create(createNewsDto: CreateNewsDto, file: Express.Multer.File) {
  // 从内存Buffer创建可读流
  const fileStream = Readable.from(file.buffer);

  // 这里可以直接使用fileStream做后续操作,比如上传到OSS、流式处理内容等
  // 示例:监听流事件验证
  fileStream.on('data', (chunk) => {
    console.log('读取到数据块大小:', chunk.length);
  });

  fileStream.on('end', () => {
    console.log('文件流读取完成');
  });

  return { success: true, message: '文件已转为可读流' };
}

补充说明:

  • Multer默认使用MemoryStorage,会把上传的文件内容存在内存Buffer里,这也是你能拿到file.buffer的原因,整个过程不会碰磁盘。
  • 如果需要处理大文件,建议调整Multer的文件大小限制,避免内存溢出:
// 修改你的ApiFile装饰器,添加limits配置
export function ApiFile(fieldName: string) {
  return applyDecorators(
    UseInterceptors(
      FileInterceptor(fieldName, {
        storage: memoryStorage(), // 显式指定内存存储(默认就是这个)
        limits: {
          fileSize: 10 * 1024 * 1024, // 限制最大10MB,按需调整
        },
      }),
    ),
  );
}
  • 转换后的fileStream是标准的Node.js ReadableStream,和通过fs.createReadStream()得到的流用法完全一致,兼容所有支持流式处理的工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:01:07