Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Node.js 下载编号最高的文件_Node.js - Fatal编程技术网

Node.js 下载编号最高的文件

Node.js 下载编号最高的文件,node.js,Node.js,我上面有一个脚本,它从服务器下载一个ZIP文件,有名为0.ZIP,22.ZIP,15.ZIP等等的ZIP文件 我想知道如何下载最高可用的(200)ZIP文件并保存它 我已经花了几个小时试图弄明白这一点,但我完全被卡住了。尝试读取所有文件,并从中找到最高的数字 const zip = { method: 'GET', url: distURL + "/zips/" highestNumber + ".zip",

我上面有一个脚本,它从服务器下载一个ZIP文件,有名为
0.ZIP
22.ZIP
15.ZIP
等等的ZIP文件

我想知道如何下载最高可用的(200)ZIP文件并保存它


我已经花了几个小时试图弄明白这一点,但我完全被卡住了。

尝试读取所有文件,并从中找到最高的数字

const zip = {
            method: 'GET',
            url: distURL + "/zips/" highestNumber + ".zip",
            responseType: 'arraybuffer'
        }
        axios(zip).then(response => {
            console.log("Downloading ZIP: " + highestNumber )
            fs.writeFileSync("./zips/" + highestNumber + ".zip", Buffer.from(response.data));
        })
如果服务器支持文件列表 您可以列出文件,正如前面的答案所指出的,
计算最大数量

如果没有 大多数服务器不会公开目录列表,因为它可能会导致安全问题。 但是,因为您知道所查找文件的模式,所以可以使用“试错”方法 通过尝试请求一个文件并检查它是否存在RetCode 200,或者是否存在RetCode 404。
您可能希望在收到状态后终止连接,而不是完成整个流,因为它可能是sllllooowWWW

使用它有点像二进制搜索(按100的顺序)。。。 一直缩小到你找到下一个

fs.readdir(directoryPath, function (err, files) {
    //handling error
    if (err) {
        return console.log('Unable to scan directory: ' + err);
    } 
    //listing all files using forEach
    let alltNumbers = new Array();
    files.forEach(function (file,index) {
        // put the file number in array and thenfind thehighest value
        let fileNumber = file.split(".zip");
        alltNumbers[index] = filefileNumber[0];
    });
});
注意:这不是设计系统的好方法,而是公开一个
/log/last
路由来下载最后一个日志文件,或者公开一个
/log/list
来列出可用的日志。 (可能为日志文件夹提供FTP访问?)

但从“黑客”的角度来看,这是一种很少使用的好方法


获取文件名。获取不带路径和“.zip”扩展名的文件名。将它们解析为整数并保留最大的一个。将其转换为名为“highestNumber”的字符串变量。但是我不知道文件名,我只想下载可用的编号最高的ZIP文件。最高数字之前的“某些”数字不可用。它们是否按时间顺序进行编号?也就是说,编号最高的文件也是最新的日期?如果是这样,你可以在这里使用一些东西:他们从1开始到20。问题是我不知道存在的最高数字或所有数字。@brianrockson噢,你的意思是它是一个远程服务器(即,不是运行代码的服务器)?除非远程服务器提供某种方式告诉您的代码,否则您无法知道。我认为您理解错了。我没有访问任何文件夹的权限。我正在从URL下载。
e.g.

// range seek phase
req 100 => there
req 1000 => not there
// Range = [100, 1000)

// binary search phase
req 550 => there  // 550 is mid point of (100, 1000)
// Range = [550, 1000)
req 775 => not there
// Range = [550, 775)
req 687 => there
...