如何读取不完整的文件并等待nodejs中的新数据

时间:2015-06-08 20:50:23

标签: node.js

我有一个UDP客户端,它从另一个源获取一些数据并将其写入服务器上的文件。由于这是大量的数据,我不希望最终用户等到它们完全写入服务器,以便他们可以下载它。所以我创建了一个NodeJS服务器,它从文件中获取最新数据并将其发送给用户。

以下是代码:

var stream = fs.readFileSync(filename)
    .on("data", function(data) {

         response.write(data)

    });

这里的问题是,如果下载开始时文件只是例如10mb .. fs.readFileSync将只读取我的文件到10mb。即使2分钟后文件增加到100mb。 fs.readFileSync永远不会知道新的更新数据。我怎么能在Node中做到这一点?我想以某种方式刷新fs状态或者perpaps使用fs文件系统等待新数据。或者是某种fs fileContent观察者?

编辑:

我认为下面的代码更好地描述了我想要实现的内容,但是在这段代码中它会永远读取并且我没有任何来自fs.read的变量可以帮助我阻止它:

fs.open(filename, 'r', function(err, fd) {
    var bufferSize=1000,
    chunkSize=512,
    buffer=new Buffer(bufferSize),
    bytesRead = 0;


    while(true){ //check if file has new content inside

        fs.read(fd, buffer, 0, chunkSize, bytesRead);
        bytesRead+= buffer.length;
    }

});

2 个答案:

答案 0 :(得分:1)

Node在fs模块中有内置方法。它被标记为不稳定,因此将来可能会发生变化。

它被称为:fs.watchFile(filename[, options], listener)

您可以在此处详细了解:https://nodejs.org/api/fs.html#fs_fs_watchfile_filename_options_listener

但我强烈建议你积极使用其中一个很好的模块 观察者

从他的自述文件中可以看出:

  

更好的文件系统观看Node.js.提供规范化的API   文件监视不同节点版本的API,嵌套/递归文件   和目录观看,以及准确的详细事件   文件/目录更改,删除和创建。

模块页面位于:https://github.com/bevry/watchr

(在一些项目中使用该模块并且运行良好,我与其他方式无关)

答案 1 :(得分:0)

你需要存储一些数据库的最后文件大小。 首先读取文件大小。 加载你的文件。 然后创建一个脚本来检查文件是否发生了变化。 您可以使用jquery.post查询大小以获取结果并决定是否需要在javascript中重新加载