Node.js - 从服务器读取并下载目录中的所有文件并保存在本地
Node.js - read and download all files in directory from server and save locally
我有一个 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: no such file or directory, scandir
'C:\Users\my.name\desktopApp\app\http:\www.mysite.co.uk\wp-content\uploads\wifi_corp2\data'"
以上是在本地查找文件,而不是在网上查找文件 link 我在 filelink[=25 中提供=] 例如。
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))
})
将打印出脚本位置上一个目录和 'public' 目录中的所有文件名。您可以使用 fs.readFile
读取每个文件的内容。如果它们是 JSON,您可以将它们读取为 utf8 字符串并用 JSON.parse
.
解析它们
要从远程服务器读取文件,必须通过 express 或其他一些静态文件服务器提供这些文件:
import express from 'express'
const app = express()
app.use(express.static('public'))
app.listen(8000)
然后在客户端,您可以使用 fetch 或 request http 库来调用托管在端口 8000 的 express 端点(在这个简单的示例中。
您混淆了服务器代码和桌面应用程序代码。显然,桌面应用程序无法在您的服务器文件上执行 readdir。
只需在 Wordpress 上安装备份或下载插件。
好的,我认为最好的解决方法是使用 Ajax 在服务器上调用 PHP 函数来读取文件的内容。
我有一个 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: no such file or directory, scandir 'C:\Users\my.name\desktopApp\app\http:\www.mysite.co.uk\wp-content\uploads\wifi_corp2\data'"
以上是在本地查找文件,而不是在网上查找文件 link 我在 filelink[=25 中提供=] 例如。 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))
})
将打印出脚本位置上一个目录和 'public' 目录中的所有文件名。您可以使用 fs.readFile
读取每个文件的内容。如果它们是 JSON,您可以将它们读取为 utf8 字符串并用 JSON.parse
.
要从远程服务器读取文件,必须通过 express 或其他一些静态文件服务器提供这些文件:
import express from 'express'
const app = express()
app.use(express.static('public'))
app.listen(8000)
然后在客户端,您可以使用 fetch 或 request http 库来调用托管在端口 8000 的 express 端点(在这个简单的示例中。
您混淆了服务器代码和桌面应用程序代码。显然,桌面应用程序无法在您的服务器文件上执行 readdir。 只需在 Wordpress 上安装备份或下载插件。
好的,我认为最好的解决方法是使用 Ajax 在服务器上调用 PHP 函数来读取文件的内容。