Присвойте переменную для файла txt, загруженного через FTP, с помощью createWriteStream - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь загрузить файл .txt через FTP, а затем назначить этот файл переменной, где я смогу позже отредактировать текст в коде.

Не знаете, как установить переменную, которая может использоваться вне блока кода FTP, когда она создается из createWriteStream в Node.js.

Как я могу передать это, txt в переменнуюftpItem и затем получить доступ к этой функции вне функции FTP?

Ошибка, возвращаемая AWS Lambda, равна ftpItem is not defined - В общем, я пытаюсь загрузить файл TXT через FTP.Поместите его в каталог / tmp / функции AWS Lambda, а затем откройте и отредактируйте этот текст позже в коде.

var fullPath = event.line_items[0].meta_data[2].value.tmp_name; 
const extension = path.extname(fullPath); 
const FileName = path.basename(fullPath, extension); 
const FileNameWithExtension = path.basename(fullPath); 

...

async function example() {
    const client = new ftp.Client()
    client.ftp.verbose = true
    try {
        await client.access({
            host: process.env.FTP_HOST,
            user: process.env.FTP_USERNAME,
            password: process.env.FTP_PASSWORD,
        })
        console.log(await client.list())
        await client.download(fs.createWriteStream('/tmp/' + FileNameWithExtension), FileNameWithExtension)
        var ftpItem = FileNameWithExtension.Body.toString('ascii');
        console.log(ftpItem);
    }
    catch(err) {
        console.log(err)
    }
    client.close()
}

...

// Use the variable ftpItem outside of the FTP call
// Also tried the following with the same error above
await client.download(fs.createWriteStream('/tmp/' + FileNameWithExtension), FileNameWithExtension)
        {
          var ftpItem = download.Body.toString('ascii');
        }  

1 Ответ

0 голосов
/ 15 февраля 2019

Используйте переменную с большей областью действия:

var fullPath = event.line_items[0].meta_data[2].value.tmp_name; 
const extension = path.extname(fullPath); 
const FileName = path.basename(fullPath, extension); 
const FileNameWithExtension = path.basename(fullPath); 
let ftpItem
...

async function example() {
    const client = new ftp.Client()
    client.ftp.verbose = true
    try {
        await client.access({
            host: process.env.FTP_HOST,
            user: process.env.FTP_USERNAME,
            password: process.env.FTP_PASSWORD,
        })
        console.log(await client.list())
        await client.download(fs.createWriteStream('/tmp/' + FileNameWithExtension), FileNameWithExtension)
        // asign the variable here
        ftpItem = FileNameWithExtension.Body.toString('ascii');
        console.log(ftpItem);
    }
    catch(err) {
        console.log(err)
    }
    client.close()
}

...

// Use the variable ftpItem outside of the FTP call
// Also tried the following with the same error above
await client.download(fs.createWriteStream('/tmp/' + FileNameWithExtension), FileNameWithExtension)
        {
          // Here you can use ftpItem
          console.log(ftpItem)
        }  
...