我的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 创建的,所以它当然不存在!
为什么我收到此错误而不是下载文件?
答案 0 :(得分:0)
来自服务器的文件名中包含:
个,这是Linux ext4
上的有效文件名字符,但不在Windows ntfs
上。
更改
var name = regexp.exec(content_disposition)[1];
到
var name = regexp.exec(content_disposition)[1].replace(':', '-');
解决了这个特殊问题。