使用 Node.js 但不在浏览器上使用的库( FileReader() 与 fs.readFileSync )库:NBT.js
Library working with Node.js but not on Browser ( FileReader() vs. fs.readFileSync ) Lib: NBT.js
基本上我使用这个 NBT 解析库将 .nbt 文件解析为可读的解码数据结构。
var fs = require('fs'),
nbt = require('nbt');
var data = fs.readFileSync('z,nbt');
nbt.parse(data, function(error, data) {
if (error) { throw error; }
console.log(data.value); //This works, prints out my minecraft nbt array structure
});
当我在 Notepad++ 中查看文件 ("z.nbt") 时,它看起来像二进制字符串:
它在 NPM 上运行完美,我得到了我正在寻找的数据结构(使用上面的代码)
然而...
现在我正在使用 React 在 Web 上尝试它..
REACT 正在调用 nbt.js 的解析函数,但是解析器对浏览器的文件输入不起作用。 (似乎导致某种逻辑错误,未定义索引)
我认为 FileReader() 的 readAsBinaryString 方法和 fs.readFileSync 方法有不同的输出字符串,NBT.js 更喜欢 fs.readFileSync,但是我试过 readAsText ()、readAsDataURL() 等...来自 FileReader 和 NBT.js 的方法无法解析任何这些输出。
我的 React 代码:
import React from 'react';
import {Container} from "react-bootstrap";
import NavbarToggle from 'react-bootstrap/esm/NavbarToggle';
import nbt from '../nbt';
const Upload = () => {
// handleUpload = (event) => {
// console.log('Success!');
// }
function handleChange(event) {
console.log(event.target.files);
// console.log(event.target.files[0]); //file struc
const file = event.target.files[0];
var reader = new FileReader();
reader.onload = (e) => {
console.log(e.target.result);
var x = nbt.parse(e.target.result, function(error, data) {
if (error) { throw error; }
console.log(data);
});
}
reader.readAsBinaryString(file);
}
return (
<Container>
Input NBT file <br/>
<input type="file" onChange={handleChange}></input>
</Container>
)
}
export default Upload
这是我在 React 中导入的 nbt.js 文件:nbt.js
reader.readAsBinaryString(file);
将其替换为 read.readAsArrayBuffer(file);
基本上我使用这个 NBT 解析库将 .nbt 文件解析为可读的解码数据结构。
var fs = require('fs'),
nbt = require('nbt');
var data = fs.readFileSync('z,nbt');
nbt.parse(data, function(error, data) {
if (error) { throw error; }
console.log(data.value); //This works, prints out my minecraft nbt array structure
});
当我在 Notepad++ 中查看文件 ("z.nbt") 时,它看起来像二进制字符串:
它在 NPM 上运行完美,我得到了我正在寻找的数据结构(使用上面的代码)
然而...
现在我正在使用 React 在 Web 上尝试它.. REACT 正在调用 nbt.js 的解析函数,但是解析器对浏览器的文件输入不起作用。 (似乎导致某种逻辑错误,未定义索引)
我认为 FileReader() 的 readAsBinaryString 方法和 fs.readFileSync 方法有不同的输出字符串,NBT.js 更喜欢 fs.readFileSync,但是我试过 readAsText ()、readAsDataURL() 等...来自 FileReader 和 NBT.js 的方法无法解析任何这些输出。
我的 React 代码:
import React from 'react';
import {Container} from "react-bootstrap";
import NavbarToggle from 'react-bootstrap/esm/NavbarToggle';
import nbt from '../nbt';
const Upload = () => {
// handleUpload = (event) => {
// console.log('Success!');
// }
function handleChange(event) {
console.log(event.target.files);
// console.log(event.target.files[0]); //file struc
const file = event.target.files[0];
var reader = new FileReader();
reader.onload = (e) => {
console.log(e.target.result);
var x = nbt.parse(e.target.result, function(error, data) {
if (error) { throw error; }
console.log(data);
});
}
reader.readAsBinaryString(file);
}
return (
<Container>
Input NBT file <br/>
<input type="file" onChange={handleChange}></input>
</Container>
)
}
export default Upload
这是我在 React 中导入的 nbt.js 文件:nbt.js
reader.readAsBinaryString(file);
将其替换为 read.readAsArrayBuffer(file);