Проблема в том, что вы теряетесь при создании асинхронной функции внутри вашего обработчика.Поскольку example()
является асинхронным, возвращается Обещание.Но вы не await
на нем, так что, как это было закодировано, это что-то вроде пожара и забыть.Кроме того, ваша лямбда завершается до того, как срабатывают ваши обратные вызовы, поэтому даже если она загрузится, вы не сможете ее увидеть.
Я предлагаю вам обернуть ваши обратные вызовы в Promises, чтобы вы могли легко await
на них из вашей функции-обработчика.
Мне удалось заставить его работать: я использовал https://dlptest.com/ftp-test/
для тестирования, поэтому измените его соответствующим образом.Кроме того, убедитесь, что я загрузил файл сам.Так что если вы хотите повторить этот пример, просто создайте файл readme.txt в корневом каталоге вашего проекта и загрузите его.Если у вас уже есть этот файл readme.txt на вашем FTP-сервере, просто удалите строку, в которую он загружает файл.
Вот рабочий пример:
const ftp = require("basic-ftp");
const fs = require("fs");
const FileNameWithExtension = "readme.txt";
module.exports.hello = async (event) => {
const client = new ftp.Client();
try {
await client.access({
host: 'ftp.dlptest.com',
user: 'dlpuser@dlptest.com',
password: 'puTeT3Yei1IJ4UYT7q0r'
});
console.log(await client.list());
await client.upload(fs.createReadStream(FileNameWithExtension), FileNameWithExtension)
await client.download(fs.createWriteStream('/tmp/' + FileNameWithExtension), FileNameWithExtension);
}
catch (err) {
console.log('logging err')
console.log(err);
}
client.close();
console.log(await readdir('/tmp/'))
console.log(await readfile('/tmp/', FileNameWithExtension))
return {
statusCode: 200,
body: JSON.stringify({message: 'File downloaded successfully'})
}
};
const readdir = dir => {
return new Promise((res, rej) => {
fs.readdir(dir, function (err, data) {
if (err) {
return rej(err);
}
return res(data)
});
})
}
const readfile = (dir, filename) => {
return new Promise((res, rej) => {
fs.readFile(dir + filename, 'utf8', function (err, data) {
if (err) {
return rej(err);
}
return res(data)
})
})
}
Вот выходные данныеЛямбда-функция:
А вот полные журналы CloudWatch:
Мой файл содержит только привет.Вы можете увидеть это в журналах.
Имейте в виду, что в лямбда-функциях у вас есть ограничение в 512 МБ при загрузке чего-либо в / tmp.Вы можете увидеть ограничения в документах