簡體   English   中英

Java 的 Files.readAllBytes() 的 Javascript 等價物是什么?

[英]What is the Javascript equivalent of Java's Files.readAllBytes()?

我需要在我的服務器應用程序上使用 javascript。 我有一個變量保存到 PDF 的路徑。

現在我想將該文件作為字節數組讀取以將其發送到另一台服務器。 在 Java 中,我會做這樣的事情:

String myPath = "\path\to\my.pdf";

try {
  byte [] myFile = Files.readAllBytes(Paths.get(myPath));

  //Own function
  sendData(myFile);
} catch (IO Exception e) {
  e.printStackTrace();
} 

我不知道 javascript 的等價物是什么。 使用 fs 庫,我只能將文件讀取為“緩沖區”類型的 object:

import fs from 'fs';
let myPath = '\path\to\my.pdf';
let myFileAsBuffer = fs.readFileSync(myPath, { flag: 'r' });
//Own function
sendData(myFileAsBuffer);

但我總是得到一個錯誤,因為服務器需要一個字節數組而不是一個緩沖區,它看起來像這樣:

<Buffer 25 50 44 46 2d 31 2e 35 0d 0a 25 b5 b5 b5 b5 0d 0a 31 20 30 20 6f 62 6a 0d 0a 3c 3c 2f 54 79 70 ...>

您應該在調用sendData之前傳播Buffer的可迭代values()

sendData([...myFileAsBuffer.values()])

請參閱: buf.values()


這是 Java 的等效示例:

import fs from 'fs';

class Files {
  static readAllBytes(path) {
    return [...fs.readFileSync(path, { flag: 'r' }).values()];
  }
}

sendData(Files.readAllBytes('/path/to/my.pdf'));

請注意, fs.readFileSync函數的path可以采用 各種類型,stringBufferURLinteger 上面示例中的static函數假設您的path是這四種類型之一。

給出的另一個答案只是一個重要說明:

在 Node.js 中,您應該遠離readFileSync等函數。 如您所知 Node.js 是單線程的。 當您調用 function 之類的readFileSync時,您將鎖定整個應用程序,直到從磁盤加載數據。 (如短暫的心臟驟停)

因此,更好的解決方案是使用readFile ,它可以與回調 function 或 promise 一起使用。

readFileSync可接受的唯一幾次是應用程序仍在初始化時,例如加載設置。 出於這個原因,如果您正在制作客戶端/服務器應用程序,我肯定會遠離readFileSync

import { readFile } from 'node:fs/promises';

// use in an async function:  
const contents = await readFile(filePath);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM