如何从字符串创建文件并通过 FormData 发送它
How to create a file from string and send it via 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, formData, {...});
此方法给出的结果与第一种方法不同。
然后我从外部 API.
得到一个错误
问题是如何在不将本地文件写入磁盘的情况下获得与第一种方法相同的结果。
提前致谢!
嗯,问题出在缓冲区而不是表单数据上。
API 要求数据有一个文件名,当使用 fs.createReadStream('file.svg');
从实际文件中读取时,它会自动具有该文件名
所以在创建缓冲区时我不得不手动添加它。
所以最终的工作解决方案是:
const svgBuffer = Buffer.from(svgString);
const formData = new FormData();
formData.append('media', svgBuffer, {
filename: 'content.svg'
});
我有一个字符串形式的 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, formData, {...});
此方法给出的结果与第一种方法不同。 然后我从外部 API.
得到一个错误问题是如何在不将本地文件写入磁盘的情况下获得与第一种方法相同的结果。
提前致谢!
嗯,问题出在缓冲区而不是表单数据上。
API 要求数据有一个文件名,当使用 fs.createReadStream('file.svg');
所以在创建缓冲区时我不得不手动添加它。 所以最终的工作解决方案是:
const svgBuffer = Buffer.from(svgString);
const formData = new FormData();
formData.append('media', svgBuffer, {
filename: 'content.svg'
});