JKa*_*fer 3 buffer fs node.js node-streams
我有一个字符串形式的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, {...}
});
});
Run Code Online (Sandbox Code Playgroud)
这是我使用 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, formData, {...});
Run Code Online (Sandbox Code Playgroud)
此方法给出的结果与第一种方法不同。然后我从外部 API 收到错误。
问题是如何获得与第一种方法相同的结果,而不将本地文件写入磁盘。
提前致谢!
嗯,问题不在于缓冲区,而在于表单数据。
API 要求数据有一个文件名,当使用以下命令从实际文件读取时,它会自动获得该文件名fs.createReadStream('file.svg');
因此,在创建缓冲区时我必须手动添加它。所以最终的工作解决方案是:
const svgBuffer = Buffer.from(svgString);
const formData = new FormData();
formData.append('media', svgBuffer, {
filename: 'content.svg'
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3034 次 |
| 最近记录: |