Node.js ftp put方法写入要上载到ftp服务器的文件名,而不是实际文件名
我正在尝试编写一个应用程序,使用npm模块ftp将文件上传到node.js中的ftp服务器。我有一个文件foo.txt,它的内容是一行:“这是一个通过ftp上传的测试文件。”我的代码是:Node.js ftp put方法写入要上载到ftp服务器的文件名,而不是实际文件名,node.js,ftp,Node.js,Ftp,我正在尝试编写一个应用程序,使用npm模块ftp将文件上传到node.js中的ftp服务器。我有一个文件foo.txt,它的内容是一行:“这是一个通过ftp上传的测试文件。”我的代码是: var Client = require("ftp"); var fs = require("fs"); var connection = require("./connections.js"); var c = new Client(); const ftpFolder = "./files/"; va
var Client = require("ftp");
var fs = require("fs");
var connection = require("./connections.js");
var c = new Client();
const ftpFolder = "./files/";
var fileList = [];
fs.readdir(ftpFolder, (err, files) => {
if(err) {
console.log(err);
} else {
files.forEach(file => {
console.log(file);
fileList.push(file);
});
}
console.log(fileList);
});
c.on("ready", function(){
fileList.forEach(file => {
c.put(file, "/backups/" + file, function(err){
if(err){
console.log(err);
} else {
console.log(file + " was uploaded successfully!");
}
c.end();
});
});
});
// Connect to ftp site
c.connect(connection.server_ftp);
我在ftp服务器上看到文件foo.txt,但当我打开它时,内容是:“foo.txt”。它似乎已将文件名写入文件,而不是上载文件。任何指导都将不胜感激 当您读取目录时,它会给您一个文件列表。它不读取文件的内容,只列出目录中文件的名称 您需要使用此文件名创建从中读取文件的路径
const path = require('path')
let filePath = path.join(ftpFolder, file)
let fileContents = fs.readFile(path, 'utf8', (err, data) => {
// do the upload
})
作为旁注。。。当您的目录读取可能工作时,您应该考虑在建立连接之后读取目录。否则,您可能会看到它失败,因为这是客户端连接和目录读取之间的竞争条件。您可能需要读取包含大量文件的目录,以便在客户端连接后解析该目录
您可以嵌套回调,但另一种处理方法是承诺。您可以同时启动这两个异步方法,并在两个方法都已解决时处理结果
var filesPromise = new Promise((resolve, reject) => {
fs.readdir(ftpFolder, (err, files) => {
if(err) reject(err)
else resolve(files)
})
})
var connectionPromise = new Promise((resolve, reject) => {
c.on("ready", () => { resolve(c) }
c.connect(connection.server_ftp)
})
Promise.all([filesPromise, connectionPromise], results => {
results[0] // files
results[1] // client
}).catch(err => {console.error(err)})
在我的例子中(非常类似),我将文件名而不是文件的完整路径放在
c.put
中。从你的代码来看,我认为是一样的