无法将 createReadStream 与 Node 18 FormData 一起使用

cyb*_*bat 11 multipartform-data node.js typescript

在 Node 18 发布fetch/FormData之前,我们可以这样做:

import FormData from 'form-data'

const form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
Run Code Online (Sandbox Code Playgroud)

但是,使用全局 FormData 我无法再传递流 - “my_file”行的错误是:

“ReadStream”类型的参数不可分配给“string |”类型的参数 斑点'

我知道这仍然是实验性的,因此可能是一个错误,或者是否有其他方法可以做到这一点 - 除了将整个文件作为字符串读取之外......

Phi*_*hil 2

Node v18 的本机FormData是 w3 FormData 接口的实现,因此您需要使用该 API。

append()方法接受 aBlob所以您应该能够使用blob流消费者

import { createReadStream } from 'node:fs';
import { blob } from 'node:stream/consumers';

// assuming a valid async context for brevity
const file = await blob(createReadStream("/foo/bar.jpg"));

const formData = new FormData();
formData.append("my_file", file, "bar.jpg");
Run Code Online (Sandbox Code Playgroud)

  • 这破坏了“流”的想法,因为整个内容都被写入内存 (3认同)