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

Node.js v20中Axios下载图片后添加至FormData报错排查

问题原因

你用responseType: 'stream'在浏览器环境下获取到的是ReadableStream对象,而FormData的append方法要求第二个参数必须是Blob/File类型,这就是报错的根源。之前代码能运行大概率是在Node.js环境(Node里stream返回的是Buffer,FormData支持Buffer),现在切换到浏览器环境就触发了类型不匹配的错误。

解决方法

直接把axios请求的responseType改成'blob',这样axios会自动把图片响应转换成Blob对象,直接就能用于FormData的append操作:

const formData = new FormData()
for (let key in payload) {
  if (key === 'image') {
    const fileUrl = payload.image
    const fileName = fileUrl.split('/').at(-1)
    // 把responseType改成blob
    const imageResponse = await axios.get(fileUrl, { responseType: 'blob' })
    console.log('got', fileUrl)
    const blob = imageResponse.data
    formData.append('image', blob, fileName)
  } else {
    formData.append(key, payload[key])
  }
}

如果必须保留stream模式(比如特殊业务场景),可以把ReadableStream手动转换成Blob,代码如下:

// 备用方案:将ReadableStream转为Blob
const imageResponse = await axios.get(fileUrl, { responseType: 'stream' })
const blob = await new Response(imageResponse.data).blob()
formData.append('image', blob, fileName)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:29:55