【问题标题】:How to upload and read large files line by line in ExpressJS?如何在 ExpressJS 中逐行上传和读取大文件?
【发布时间】:2021-04-13 00:35:28
【问题描述】:

我正在尝试将一个大文件上传到 Express,我能够使用 express-fileuploadmiddleware 成功读取文件对象,如下所示。

{
  myfile: {
    name: 'somelargefile.txt',
    data: <Buffer /* details truncated */ ... 110075790 more bytes>,
    size: 110075840,
    encoding: '7bit',
    tempFilePath: '',
    truncated: false,
    mimetype: 'text/plain',
    md5: '/* details truncated */',
    mv: [Function: mv]
  }
}

但是,如果我将整个文件保存到 files 对象中,express 可能会占用 大量内存。如何从请求对象中逐行读取文件,例如使用流?

【问题讨论】:

    标签: javascript node.js typescript express npm


    【解决方案1】:

    对于大文件,readFileSync 可能不方便,因为它将整个文件加载到内存中。一种不同的同步方法是迭代调用readSync,一次读取少量数据,并在出现时处理这些行。

    例如:

    var fs = require('fs');
    var filename = 'test.txt'
    
    var fd = fs.openSync(filename, 'r');
    var bufferSize = 1024;
    var buffer = new Buffer(bufferSize);
    
    var leftOver = '';
    var read, line, idxStart, idx;
    while ((read = fs.readSync(fd, buffer, 0, bufferSize, null)) !== 0) {
      leftOver += buffer.toString('utf8', 0, read);
      idxStart = 0
      while ((idx = leftOver.indexOf("\n", idxStart)) !== -1) {
        line = leftOver.substring(idxStart, idx);
        console.log("one line read: " + line);
        idxStart = idx + 1;
      }
      leftOver = leftOver.substring(idxStart);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2020-11-12
      • 2021-08-21
      相关资源
      最近更新 更多