将节点 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
意味着它是一个完整的对象,具有 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
得到一个在浏览器中读取和解析文件的包
<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
意味着它是一个完整的对象,具有 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