使用内置 NodeJS `fetch` 在 FormData 中上传文件

Rex*_*Pan 6 file-upload form-data fetch node.js

如何使用 Node.JS 内置的 FormData 上传文件fetch(不是node_fetch)?

Rex*_*Pan 8

FormData使用 NodeJS 内置文件上传文件fetch。我们将文件读取为Blobthensetappend对象FormData。最后我们将FormData对象作为请求的正文发送fetch

要将文件读取为Blob,我们可以使用fs.openAsBlob(Node.JS ^19.8) 或读取文件fs.readFile并将Buffer其转换为Blob.

import { openAsBlob } from 'node:fs' // Node.JS ^19.8
import { readFile } from "node:fs/promises"
import { lookup } from "mime-types"

uploadFile("./path/to/file.ext").then(res => res.text()).then(console.info)

async function uploadFile(/** @type {string} */ filePath) {
  const file = await openAsBlob(filePath); // or
  const file = new Blob([await readFile(filePath)], { type: lookup(filePath) });
  const formData = new FormData()
  formData.set("file", file, "file_name.ext");
  return fetch(`https://example.com/upload`, { method:"POST", body:formData, /* ... */ });
}
Run Code Online (Sandbox Code Playgroud)