Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 无法创建WriteStream以保存下载的文件_Javascript_Node.js_Node Webkit - Fatal编程技术网

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

Javascript 无法创建WriteStream以保存下载的文件,javascript,node.js,node-webkit,Javascript,Node.js,Node Webkit,我的应用程序中有一个功能,可以从服务器下载一堆文件,并将它们保存在用户选择的文件夹中,其中包含从服务器发送的名称。我事先不知道文件的名称——我使用的URL是从另一台服务器随机生成的字符串,该服务器正在查找每个哈希,以查看它对应的文件 var regexp = /filename=\"(.*)\"/gi; media_urls.forEach(function(url) { var req = client.request(options, function(res) {

我的应用程序中有一个功能,可以从服务器下载一堆文件,并将它们保存在用户选择的文件夹中,其中包含从服务器发送的名称。我事先不知道文件的名称——我使用的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();
});
当代码运行时,我不断收到
enoint
错误。这没有任何意义,因为文件应该现在创建,所以它当然不存在


为什么我没有下载文件而收到此错误?

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

改变

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


解决了这个特殊问题。

请注意,
内容处置
标题不仅仅是文件名。这不一定是必需的--
内容处理:附件;filename=file.ext
@JonathanLonowski特定服务器保证返回文件名。它总是从磁盘返回确切的文件名。
var name = regexp.exec(content_disposition)[1].replace(':', '-');