无法创建 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(':', '-');
解决了这个特殊问题。
我的 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(':', '-');
解决了这个特殊问题。