将节点 js fs 的响应转换为 Web 文件 api

Convert response from nodjs fs to web file 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 和节点 js 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