在浏览器中读取和解析文件时得到一个包
<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
意味着它是一个完整的对象,具有name
、lastModified
…等属性
同时在Node.js中,fs.readFile
使用utf8
编码返回的值将作为字符串的文件内容。
所以它们确实是不相容的。根据somepackage.read
对File
对象所做的操作,您可以通过单独的fs.stat
调用检索日期信息来模拟虚拟对象。
幸运的是,像https://github.com/node-file-api/file-api已经处理好了。
请注意,如果somepackage.read
假设提供的文件是Blob
,则需要使用Node.js 15.x中最近引入的功能来增强上面提到的包:https://github.com/nodejs/node/pull/36811