如何解决如何从字符串创建文件并通过FormData发送文件
我有一个字符串形式的 svg 。我想将该字符串转换为文件,然后通过FormData
发送到另一个API。
我找到了一种工作方式,但包括在本地创建文件(使用fs
,然后从刚刚创建的文件创建readStream
。处理许多文件非常慢,并且大多数情况下会在最后一次结束。
fs.writeFile('file.svg',svgString,async () => {
const fr = fs.createReadStream('file.svg');
const formData = new FormData();
formData.append('media',fr);
const response = await Axios.post(route,formData,{...}
});
});
这是我使用Buffer和Readable的(失败)方法:
// Create readable from svg string
const b = Buffer.from(svgString,'utf-8');
const r = Readable.from(b);
const formData = new FormData();
formData.append('media',fr);
const response = await Axios.post(route,{...});
此方法的结果与第一个方法不同。 然后我从外部API收到错误。
问题是,如何在不将本地文件写入磁盘的情况下获得与第一种方法相同的结果。
谢谢!
解决方法
好吧,问题出在缓冲区而不是表单数据上。
API要求数据具有文件名,当使用fs.createReadStream('file.svg');
从实际文件中读取文件名时,它将自动具有该文件名。
因此,在创建缓冲区时,我必须手动添加它。 因此,最终的解决方案是:
const svgBuffer = Buffer.from(svgString);
const formData = new FormData();
formData.append('media',svgBuffer,{
filename: 'content.svg'
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。