无法createWriteStream来保存下载的文件

时间:2015-04-09 18:57:56

标签: javascript node.js node-webkit

我的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错误。这没有任何意义,因为该文件应该是 now 创建的,所以它当然不存在!

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

1 个答案:

答案 0 :(得分:0)

来自服务器的文件名中包含:个,这是Linux ext4上的有效文件名字符,但不在Windows ntfs上。

更改

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

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

解决了这个特殊问题。