【问题标题】:Download the highest numbered file下载编号最高的文件
【发布时间】:2021-02-24 22:18:13
【问题描述】:
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));
        })

我上面有这个脚本,它从服务器下载一个 ZIP 文件,并且有名为 0.zip22.zip15.zip 等的 ZIP 文件...

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

我已经尝试解决这个问题好几个小时了,但我直接卡住了。

【问题讨论】:

  • 获取文件名。获取不带路径且不带“.zip”扩展名的文件名。将它们解析为整数并保留最大的一个。将其转换为名为“highestNumber”的字符串变量。
  • 但我不知道文件名,我只想下载可用的最高编号 ZIP 文件。最高数字之前的“某些”数字不可用。
  • 它们是按时间顺序编号的吗?即,编号最高的文件也是最新的?如果是这样,你可以在这里使用一些东西:stackoverflow.com/questions/10559685/…
  • 他们只是从 1 到 20 开始。问题是我不知道存在的最高数字或所有数字。
  • @brianrockson 哦,你的意思是它是一个远程服务器(即不是你的代码运行的那个)?那么除非远程服务器提供某种方式告诉您的代码,否则您无法知道。

标签: node.js


【解决方案1】:

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

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];
    });
});

【讨论】:

  • 我想你理解错了。我无权访问任何文件夹。我正在从 URL 下载。
【解决方案2】:

如果服务器支持文件列表

您可以列出文件,正如之前的答案所指出的那样,
求最大数。

如果没有

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

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

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
...

注意:这不是设计系统的好方法,您宁愿公开/log/last 路由以下载最后一个日志文件,或者公开/log/list 以列出可用日志。 (也许为日志文件夹提供 FTP 访问?)

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

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 2023-02-05
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多