【问题标题】:Node js: Download file to memory and pass to library function without saving to diskNode js:将文件下载到内存并传递给库函数而不保存到磁盘
【发布时间】:2022-10-07 18:11:46
【问题描述】:

下面的代码工作正常,但我有一些代码反馈: \"为什么要将文件下载并保存到磁盘,只是为了将其读回内存中?\"

然而,在花了几个小时探索Bufferstream 的选项之后,我似乎没有取得任何进展。

const fs = require(\'fs\');
const { PdfData } = require(\'pdfdataextract\');
const axios = require(\'axios\').default;

const getPDFText = async ({ url }) => {
  const tmpDir = `${process.cwd()}/my_dir`;
  const writer = fs.createWriteStream(`${tmpDir}/document.pdf`);
  const response = await axios({
    url,
    method: \'get\',
    responseType: \'stream\'
  });
  response.data.pipe(writer);

  const text = await new Promise((resolve, reject) => {
    writer.on(\'finish\', () => {
      const fileData = fs.readFileSync(`${tmpDir}/document.pdf`);

      PdfData.extract(fileData, {
        get: {
           // ...
        },
      })
      .then(resolve)
      .catch(reject);
    });
    writer.on(\'error\', reject);
  });

  return text;
};

如何避免将文件保存到磁盘,而是将其输入PdfData.extract 方法?

    标签: javascript node.js pdf-extraction


    【解决方案1】:

    The signature for .extract 表示它接受 Uint8Array

    就像是

    const {PdfData} = require('pdfdataextract');
    const axios = require('axios').default;
    
    async function getPDFText({url}) {
      const response = await axios({
        url,
        method: 'get',
        responseType: 'arraybuffer',
      });
      const pdfUint8Array = new Uint8Array(response.data);
      const res = await PdfData.extract(pdfUint8Array, /* ... */);
      console.log(res);
      return res;
    }
    

    能做到吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 2013-12-26
      • 2021-12-29
      相关资源
      最近更新 更多