我正在尝试使用 NodeJS 脚本将文件从 SFTP 服务器复制到 SMB 共享,但前提是文件的更新时间超过 3 天。我这里有代码的基本框架,但我在明显的地方绊倒了;从 SFTP 获取文件作为流,这样我就可以作为流写入 SMB。文件可能非常大,因此我想避免在下载/重新上传周期中使用本地存储。
const path = require('path');
const sftp = require('ssh2-sftp-client');
const smb2 = require('smb2');
const config = require('./config');
function extractTimestamp(filename) {...} // works fine
function calculateAgeFromTimestamp(timestamp) {...} // also works fine
async function processFiles() {
const sftpClient = new sftp();
const smbClient = new smb2(config.smb);
try {
await sftp.connect(config.sftp);
console.log(`Listing remote SFTP source: ${config.sourceDir}`);
const files = await sftp.list(config.sourceDir);
if (files.length === 0) {
console.log('No files found on SFTP.');
return;
}
for (const file of files) {
const sourceFilePath = path.join(config.sourceDir, file.name);
const destinationFilePath = config.smb.share + '\\' + file.name;
const timestamp = extractTimestamp(file.name);
const fileAgeDays = calculateAgeFromTimestamp(timestamp);
if (fileAgeDays <= 3) {
const exists = await new Promise((resolve, reject) => {
smbClient.exists(destinationFilePath, (err, exists) => {
if (err) {
console.error('Error checking file existence on SMB:', err);
reject(err);
} else {
resolve(exists);
}
});
});
if (!exists) {
console.log('Found file to copy');
// !!!confusing stream code goes here
} else {
console.log('File already exists');
}
}
}
} catch (error) {
console.error('Error:', error);
} finally {
sftp.end();
smbClient.close();
}
}
processFiles();
我可以使用某种包装器将 SFTP 的读取内容转换为流吗?
我无法使用上面的代码连接到 smb 共享。访问被拒绝。有什么帮助吗