文件引用"/>
Node.js FormData 和文件引用
假设我想使用 Fetch API 上传本地文件作为 Node.js 的 FormData 的一部分。
如果这是一个浏览器,我可能已经有一个文件或 blob 引用,例如来自 file 输入元素。在那种情况下,我只是将文件引用附加到 FormData 实例,用户代理负责从磁盘流式传输它,如下所示:
const formData = new FormData();
formData.append('file', fileInputElement.files[0]);
const res = await fetch(postURL, {
method: 'POST',
body: formData
});
现在,在 Node.js 的情况下,没有文件输入元素。我所拥有的只是磁盘上的路径。我如何从中获取 Blob 或文件引用?
我调查过的一些事情:
- 一个简单的
返回一个FileHandle,这不是FormData可以使用的东西。fs.open()
- A ReadableStream 也不能直接使用
- Blob Stream Consumers 实用程序将允许我从 ReadableStream 创建一个 Blob,但它通过在内存中缓冲流的全部内容来实现。这行不通,因为我正在上传数 GB 的文件。
对于磁盘上的本地文件,有没有什么方法可以使用 Node.js 获取 FormData 可以使用的文件引用?
回答如下:使用
form-data
包而不是 Node 的内置 FormData,您可以使用文件路径或 ReadableStream
在服务器上设置文件路径。 ReadableStream
,Node.js流,是文件的内容。要使用文件路径引用文件,您可以创建一个新的 FormData
对象并使用 append 方法将文件添加到其中。
// Append
const fs = require('fs');
const FormData = require('form-data');
const formData = new FormData();
formData.append('file', fs.createReadStream('/path/to/file'));
要使用
ReadableStream
引用文件,您可以将流直接传递给 append
方法:
// Append
const fs = require('fs');
const FormData = require('form-data');
const fileStream = fs.createReadStream('/path/to/file');
const formData = new FormData();
formData.append('file', fileStream);
使用键
FormData
将文件添加到'file'
对象。然后,您可以使用 formData
对象向接受表单数据的服务器发出请求。
在 Node.js 中,您可以使用
FormData
类来创建和发送 multipart/form-data
请求。
如何使用FormData
上传文件的示例:
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
// add a file field
form.append('file', fs.createReadStream('/path/to/file'));
// add additional fields
form.append('name', 'John Doe');
form.append('email', '[email protected]');
// send the request
const response = await fetch('https://example/upload', {
method: 'POST',
body: form
});
console.log(await response.text());
在此示例中,
FormData
创建一个 multipart/form-data
请求,其中包含一个文件字段 (file
) 和两个附加字段(name
和 email
)。然后,我们使用fetch
发送请求。
此外,FormData
也可用于通过调用 multipart/form-data
为每个文件字段使用不同的文件来发送带有多个文件的 form.append
请求。
有关 Node.js 中
FormData
的更多信息,您可以找到有用的资源:
使用 FormData 对象 - MDN Web 文档
使用 Node.js 上传文件 - Felix 的 Node.js 指南
更多推荐
Node.js FormData 和文件引用
发布评论