参考 Node.js v16.11.1 文档 和 mdn 文档
fs.writeFileSync(file, data[, options]) 或 fs.writeFile(file, data[, options], callback)
参数
这两个比较简单的写入方法中 data 参数是比较难处理的,data 支持的类型有 string | Buffer | TypedArray | DataView | Object 这几种,下面对这几种类型的 data 分别说明:
string
普通 string 即可
Buffer
Buffer 对象用于表示固定长度的字节序列。 许多 Node.js API 都支持 Buffer。
Buffer 类是 JavaScript Uint8Array 类的子类,Node.js API 在支持 Buffer 的地方也接受普通的 Uint8Array。而所有的 Uint8Array 对象继承自 TypedArray.prototype(换句话说,Uint8Array 是 TypedArray 指代的构造函数之一)。
可以通过 Buffer.from(arrayBuffer[, byteOffset[, length]]) 构造,arrayBuffer 是一个 ArrayBuffer 对象, 可以通过 File.arrayBuffer() 获取(注意 File.arrayBuffer() 返回的是一个 promise,而且这是继承自 Blob 的方法)
TypedArray
一个类型化数组(TypedArray)对象描述了一个底层的二进制数据缓冲区(binary data buffer)的一个类数组视图(view)。
TypedArray 实际是指一类值为特定元素类型的类型化数组构造函数,比如 Int8Array,Uint8Array,Float32Array 等等,而没有一个真的叫 TypedArray 的构造函数。
可以使用 new TypedArray (buffer [, byteOffset [, byteLength]]) 构造,buffer 参数是 ArrayBuffer 对象。
DataView
DataView 视图是一个可以从 二进制ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。
使用 new DataView(buffer [, byteOffset [, byteLength]]) 构造,buffer 参数可以是 ArrayBuffer 或 SharedArrayBuffer(这个还带有实验性质)对象。
Object
必须具有自有的(不是继承的)toString 函数属性。
使用示例(仅片段,如何调用 node 模块不在本例考虑范畴以内)
const {Buffer} = require('buffer')
const fs = require('fs')
const file = new File(["foo"], "foo.txt", {
type: "text/plain",
})
const rootPath = '保存路径'
file.arrayBuffer()
.then((fileData) => {
fs.writeFileSync(rootPath, Buffer.from(fileData))
})