Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查两个文件是否相同?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何检查两个文件是否相同?

Javascript 如何检查两个文件是否相同?,javascript,node.js,express,Javascript,Node.js,Express,我想知道是否有一种方法可以判断两个文件是相同的 我正在使用一个解决方案,但它似乎不是很有效,我下载了每个解决方案的第一部分,然后将接收到的数据转换为base64,最后对它们进行比较 但我面临一个问题,例如,当两个文件(a.html和b.html)的前半部分相同时,生成的签名是相同的,即使最后一部分不同。 我用来下载文件预览的代码 https.get(url, function(res) { var chunks = []; if (res.statusCode !

我想知道是否有一种方法可以判断两个文件是相同的

我正在使用一个解决方案,但它似乎不是很有效,我下载了每个解决方案的第一部分,然后将接收到的数据转换为base64,最后对它们进行比较

但我面临一个问题,例如,当两个文件(a.html和b.html)的前半部分相同时,生成的签名是相同的,即使最后一部分不同。 我用来下载文件预览的代码

https.get(url, function(res) {
        var chunks = [];
        if (res.statusCode !== 200) {
            responce.jsonp(404, null);
        }
        res.on('data', function(chunk) {

            chunks.push(chunk);
            var jsfile = new Buffer.concat(chunks).toString('base64');
            jsfile = jsfile.substring(0, 100);
            responce.header('Access-Control-Allow-Origin', '*');
            responce.header('Access-Control-Allow-Headers', 'X-Requested-With');
            responce.header('content-type', 'application/pdf');
            responce.send(200, jsfile);
        });

我认为您应该使用md5哈希进行文件比较。查看此信息:

我认为您不应该在2014年推荐MD5。问题不在于散列,而在于我必须下载整个文件才能判断它们是否相同。例如,如果我有一个大小为50mb的pdf文件,我必须等待很长时间,直到下载完成。这是一个不可避免的问题。如果您同时查看50mb文件,我强烈建议您使用哈希方法,因为您需要在内存中存储这两个副本来比较base64。您可以发布代码吗?听起来你好像有虫。如果您确实对所有文件数据进行了base64处理,然后比较了整个base64字符串,那么它们肯定会有所不同。这只是代码的一个片段,但您不会等到收到整个响应后再发回数据。res.on('data')将被多次调用,您需要等到res.on('end')…才能知道所有数据都在其中。如果我有一个大文件(例如50MB),我使用此方法可以将等待时间减到最少我会等到它完成,这至少需要5分钟。如果你没有完整的文件来比较,你能告诉他们是否不同吗?你也可以查看头来检查etag,但它不是100%可靠。另外,如果文件在s3或类似的服务中,http的头方法可能会给你一个文件的md5