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

发送到后端前如何访问multipart/form-data类型图片Buffer实现上传前预览

问题解答

Buffer的生成位置

你在后端看到的Buffer是**multer中间件在服务端生成的:
前端提交的FormData里携带的是浏览器原生File对象,本质是本地文件的二进制内容引用,multer收到请求后会解析multipart/form-data格式的请求体,把上传的文件二进制内容读取、封装为Node.js专用的Buffer格式,所以前端提交前的FormData里本来就不存在这个Buffer对象。

前端预览图片的实现方案

你完全不需要拿到服务端生成的Buffer就能实现提交前预览,浏览器提供了两种常用实现方案,直接操作前端拿到的File对象即可:

方案1:使用URL.createObjectURL(性能最优,代码简洁)

直接在文件选择的change事件里,用选中的File对象生成临时可访问的URL,赋值给img标签的src属性即可,示例代码:

// 在你的filesChange方法里添加如下逻辑
function filesChange(fieldName, files) {
  // 假设页面上有id为previewImg的img标签用于展示预览图
  const previewImg = document.getElementById('previewImg')
  // 以第一个选中的图片为例
  if (files[0]) {
    // 生成临时预览地址
    const previewUrl = URL.createObjectURL(files[0])
    previewImg.src = previewUrl
    // 可选:图片加载完成后释放临时地址,避免内存泄漏
    // previewImg.onload = () => URL.revokeObjectURL(previewUrl)
  }
  // 保留你原本的其他逻辑不变
}

方案2:使用FileReader读取为Base64(需要处理二进制内容时可选)

如果除了预览之外还需要拿到文件的二进制内容做其他处理,可以用这个方案:

function filesChange(fieldName, files) {
  const previewImg = document.getElementById('previewImg')
  if (files[0]) {
    const reader = new FileReader()
    reader.onload = function(e) {
      previewImg.src = e.target.result
      // e.target.result就是文件的Base64编码,也可以转成Uint8Array格式的二进制数据,和服务端Buffer内容完全对应
    }
    reader.readAsDataURL(files[0])
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:54:03