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

express.js中如何将内存中的buffer数据转化为可下载文件?

场景1:Express直接返回Buffer供用户下载

不需要将Buffer写入本地磁盘,只需正确配置响应头后直接返回Buffer即可,示例代码如下:

// 路由中multer已经将文件解析到req.file
const { buffer, originalname, mimetype } = req.file;

// 配置响应头
res.set({
  // 指定文件的MIME类型
  'Content-Type': mimetype,
  // 指定为附件下载,encodeURIComponent解决中文文件名乱码问题
  'Content-Disposition': `attachment; filename*=UTF-8''${encodeURIComponent(originalname)}`,
  // 指定文件大小
  'Content-Length': buffer.length
});

// 直接返回Buffer即可触发下载
res.send(buffer);

之后你把文件存入MongoDB时,只要同步存储buffer、originalname、mimetype三个字段,取出时复用上面的逻辑即可实现下载,不需要额外处理。

场景2:Buffer直接作为邮件附件发送

主流Node.js邮件发送库都原生支持直接传入Buffer作为附件内容,不需要写入本地文件,以常用的nodemailer为例,示例代码如下:

const nodemailer = require('nodemailer');

// 初始化邮件传输实例,配置你的邮箱服务商参数
const transporter = nodemailer.createTransport({
  host: 'smtp.example.com',
  port: 465,
  secure: true,
  auth: {
    user: '你的邮箱地址',
    pass: '你的邮箱授权码'
  }
});

// 发送带附件的邮件
async function sendAttachmentMail(fileBuffer, fileName, fileMimeType) {
  await transporter.sendMail({
    from: '发件人 <sender@example.com>',
    to: '收件人 <receiver@example.com>',
    subject: '文件附件',
    text: '请查收附件中的文件',
    attachments: [
      {
        filename: fileName,
        // 直接传入Buffer作为附件内容
        content: fileBuffer,
        contentType: fileMimeType
      }
    ]
  });
}

// 调用时直接传入req.file中的对应参数即可
// sendAttachmentMail(req.file.buffer, req.file.originalname, req.file.mimetype)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:15:01