调用Etsy API上传图片提示非有效文件,如何获取正确二进制格式?
问题根因
你现有代码的问题出在buffer.toString("binary")这一步操作:该方法会把图片的原始二进制Buffer转换为ISO-8859-1编码的字符串,直接破坏了图片的二进制结构,所以Etsy接口无法识别为有效图片文件。
正确实现方式
核心原则是不要对原始二进制Buffer做任何字符串转换,根据你的图片来源对应调整逻辑即可:
从网络地址获取图片
async function getImageBinary(url) { const imageRes = await fetch(url); // 浏览器环境直接返回原始ArrayBuffer即可 return await imageRes.arrayBuffer(); // Node.js环境可以转成Buffer格式返回:return Buffer.from(await imageRes.arrayBuffer()); }
读取本地图片文件
import fs from 'fs/promises'; async function getLocalImageBinary(filePath) { // 直接返回读取到的原始Buffer即可 return await fs.readFile(filePath); }
上传请求注意事项
- 构造请求时必须使用
multipart/form-data格式传递图片数据 - 图片对应的表单字段要正确设置文件名和MIME类型(比如
image/jpeg、image/png),和实际图片格式保持一致 - 不要对二进制数据做Base64编码、字符串转码等额外处理,直接传入原始Buffer/ArrayBuffer即可
内容的提问来源于stack exchange,提问作者Kelveen
相关产品推荐
相关产品推荐

