Javascript 无法创建WriteStream以保存下载的文件
我的应用程序中有一个功能,可以从服务器下载一堆文件,并将它们保存在用户选择的文件夹中,其中包含从服务器发送的名称。我事先不知道文件的名称——我使用的URL是从另一台服务器随机生成的字符串,该服务器正在查找每个哈希,以查看它对应的文件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) {
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,这在Linuxext4
上是有效的文件名字符,但在Windowsntfs
上不是
改变
var name = regexp.exec(content_disposition)[1];
到
解决了这个特殊问题。请注意,
内容处置
标题不仅仅是文件名。这不一定是必需的--内容处理:附件;filename=file.ext
@JonathanLonowski特定服务器保证返回文件名。它总是从磁盘返回确切的文件名。
var name = regexp.exec(content_disposition)[1].replace(':', '-');