【问题标题】:Cannot read File from fs with FileReader无法使用 FileReader 从 fs 读取文件
【发布时间】:2020-09-21 11:17:33
【问题描述】:

您好,我正在尝试读取文件,但 nodejs 中的 fileReader readAsArrayBuffer 函数出现问题。

var FileReader = require("filereader");

let p12_path = __dirname + "/file.p12";

var p12xxx = fs.readFileSync(p12_path, "utf-8");

var reader = new FileReader();

reader.readAsArrayBuffer(p12xxx);//The problem is here
reader.onloadend = function() {
  arrayBuffer = reader.result;
  var arrayUint8 = new Uint8Array(arrayBuffer);
  var p12B64 = forge.util.binary.base64.encode(arrayUint8);
  var p12Der = forge.util.decode64(p12B64);
  var p12Asn1 = forge.asn1.fromDer(p12Der);

  ............
}

-------错误

Error: cannot read as File: "0�6�\.............

【问题讨论】:

  • FileReader 类从何而来?它不是原生 JS / NodeJS。
  • 你好 Niklas 我导入为 var FileReader = require("filereader");它是一个 npm 包,npmjs.com/package/filereader
  • 除了我的回答:你能描述一下你想读什么样的文件以及你打算如何处理这些数据吗?
  • 另外一个:是否需要使用npm包文件阅读器?如果没有更多上下文,最好还是直接使用原生 fs.readFile(path, callback)
  • Niklas 我正在尝试采用一种实现来使用 xades-bes 对 xml 进行签名,这个实现是在浏览器端工作的。所以我试图将它调整到 nodejs 中的工作服务器端。这是codesanbox上的代码codeandbox.io/s/heuristic-chaum-px00o?file=/src/xades-bes.js –

标签: node.js fs


【解决方案1】:

根据npm filereader Doc,使用fs.readFileSync(p12_path, "utf-8");创建的阅读器需要获取utf-8编码的文件路径,否则无法读取。

打印出来的"0�6�\.............显示文件显然不是utf8格式,因此不可读。

【讨论】:

  • 我测试 let p12_path = __dirname + "/file.p12" 并且已经读取了相对路径 ok
  • 给出路径的方式是可以的,但不是文件/内容。它不是 uft8 文本文件。
【解决方案2】:

您正在阅读的 PDF 文件不是基于文本的格式,并且不应指定编码。根据 fs 文档“如果指定了编码选项,则此函数返回一个字符串”,但因为它主要是一个二进制文件,它读取无效的 UTF8 字符。当您排除编码时,它应该给您一个 Buffer 对象,而不是您最可能想要的。

【讨论】:

  • 当我删除 utf-8 编码时,它给了我这个错误:错误:无法读取为文件:{“type”:“缓冲区”,“数据”:[48,130.5 .....
  • filereader 在这里应该为你做什么,你为什么要在你已经阅读过的文件上使用它?
  • 我正在尝试采用一种实现来使用 xades-bes 对 xml 进行签名,这个实现是在浏览器端工作的。所以我试图将它调整到 nodejs 中的工作服务器端。这是codesanbox上的代码codesandbox.io/s/heuristic-chaum-px00o?file=/src/xades-bes.js
  • 您不需要服务器上的文件阅读器。只需放弃它以支持 fs 以节省节点模块的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多