Node.js – 从服务器读取并下载目录中的所有文件并保存在本地

我有一个Node Webkit桌面应用程序,需要从服务器上下载文件,并在用户离线时在本地保存。 当我知道文件名是什么时,我可以下载和保存文件,但是如何读取服务器上目录的内容,以便我可以下载每个文件?

function cacheFiles(filelink, filepath, cb) { var path_array = filelink.split("/"); var foldername = path_array[path_array.length - 2] //create new folder for locally html files var newdir = filepath + '/' + foldername; if (fs.existsSync(newdir)){ alert('file already exists, cannot cache this file.'); } else { fs.mkdirSync(newdir); } //download and save index.html - THIS WORKS var indexfile = fs.createWriteStream(newdir+'/index.html'); var request = http.get(filelink, function(response) { response.pipe(indexfile); indexfile.on('finish', function() { indexfile.close(cb); }); }); //read contents of data folder - THIS DOESN'T WORK var datafolder = filelink.replace('index.html',''); fs.readdir( datafolder, function (err, datafiles) { if (!err) { console.log(datafiles); }else{ console.log(err) ; } }); 

}

我在我的控制台中得到的错误是:

“ENOENT:没有这样的文件或目录,scandir'C:\ Users \ my.name \ desktopApp \ app \ http:\ www.mysite.co.uk \ wp-content \ uploads \ wifi_corp2 \ data'”

以上是在本地寻找文件,而不是在我在filelink提供的在线链接。 http://www.mysite.co.uk/wp-content/uploads/wifi_corp2/data

以下代码不读取远程文件系统,它用于读取本地硬盘上的文件。

 import fs from 'fs' import path from 'path' fs.readdir(path.resolve(__dirname, '..', 'public'), 'utf8', (err, files) => { files.forEach((file) => console.info(file)) }) 

将从脚本位置的一个目录和“公共”目录中打印出所有文件名。 您可以使用fs.readFile来读取每个文件的内容。 如果他们是JSON,你可以读取它们作为utf8string,并用JSON.parseparsing它们。

要从远程服务器读取文件,必须通过express或其他静态文件服务器进行服务:

 import express from 'express' const app = express() app.use(express.static('public')) app.listen(8000) 

然后在客户端,可以使用获取或请求http库来调用端口8000托pipe的express端点(在这个简单的例子中)。

您正在将服务器代码与桌面应用代码混合在一起。 桌面应用程序显然不能在你的服务器文件上做一个readdir。 只需在Wordpress上安装备份或下载插件。

好吧,我想最好的解决方法是使用Ajax调用服务器上的PHP函数来读取文件的内容。