将响应从nodjs-fs转换为web文件api



在浏览器中读取和解析文件时得到一个包

<input multiple accept=".abc" name="file" id="txtFileUpload" type="file" onchange="upload(event)"/>
function upload(event) {
var file = event.target.files[0];
somepackage.read(file, function(error, data) {...}

我需要在nodejs 中使用相同的包

fs.readFile("somefile.abc", 'utf8' , (err, file) => {
somepackage.read(file, function (error, data) {
// gives error

来自web浏览器api的响应和来自nodejs-fs的响应不相同。是否可以从节点的fs转换响应,使其与浏览器中的响应相同?

在浏览器中,file变量将是File的实例,如MDN页面中所述:https://developer.mozilla.org/en-US/docs/Web/API/File

意味着它是一个完整的对象,具有namelastModified…等属性

同时在Node.js中,fs.readFile使用utf8编码返回的值将作为字符串的文件内容。

所以它们确实是不相容的。根据somepackage.readFile对象所做的操作,您可以通过单独的fs.stat调用检索日期信息来模拟虚拟对象。

幸运的是,像https://github.com/node-file-api/file-api已经处理好了。

请注意,如果somepackage.read假设提供的文件是Blob,则需要使用Node.js 15.x中最近引入的功能来增强上面提到的包:https://github.com/nodejs/node/pull/36811