无法创建 WriteStream 来保存下载的文件

Unable to createWriteStream to save downloaded file

我的 NW.js 应用程序中有一个功能,可以从服务器下载一堆文件,并将它们保存在用户选择的文件夹中,并使用从服务器发送的名称。我事先不知道文件的名称 - 我使用的 url 是我从另一台服务器获得的随机生成的字符串,并且该服务器正在查找每个哈希以查看它对应于哪个文件。

var regexp = /filename=\"(.*)\"/gi;

media_urls.forEach(function(url) {
    var req = client.request(options, function(res) {
        var file_size = parseInt(res.headers['content-length'], 10);
        var content_disposition = res.headers['content-disposition'];
        var name = regexp.exec(content_disposition)[1];
        var path = Path.join(save_dir, name);

        var file = fs.createWriteStream(path);
        file.on('error', function(e) {
            console.log(e);
            req.abort();
        });

        res.on('data', function(chunk) {
            file.write(chunk);
        });

        res.on('end', function() {
            file.end();
        });
    });
    req.on('error', function(e) {
        console.log(e);
    });
    req.end();
});

我在运行此代码时不断收到 ENOENT 错误。这没有任何意义,因为该文件应该现在创建,所以它当然不存在!

为什么我收到此错误而不是下载文件?

来自服务器的文件名中有 :,这是 Linux ext4 上的有效文件名字符,但 Windows ntfs.

改变

var name = regexp.exec(content_disposition)[1];

var name = regexp.exec(content_disposition)[1].replace(':', '-');

解决了这个特殊问题。