【问题标题】:AWS Lambda nodejs upload file to ftpAWS Lambda nodejs 上传文件到 ftp
【发布时间】:2020-06-23 02:23:45
【问题描述】:

我正在使用 lambda nodejs 将文件上传到 ftp 服务器。

上传文件源代码:

const ftp = require('basic-ftp');
const fs = require('fs');

class FTPClient {
    constructor(host = 'localhost', port = 21, username = 'anonymous', password = 'guest', secure = false) {
        this.client = new ftp.Client();
        this.settings = {
            host: host,
            port: port,
            user: username,
            password: password,
            secure: secure
        };
    }

    upload(sourcePath, remotePath) {
        let self = this;
        (async () => {
            try {
                let access = await self.client.access(self.settings);
                let upload = await self.client.upload(fs.createReadStream(sourcePath), remotePath);
            } catch(err) {
                console.log(err);
            }
            self.client.close();
        })();
    }

    close() {
        this.client.close();
    }
}

module.exports = FTPClient;

index.js 文件:

const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const ftp = require('./upload');
const request = require('request');

let doRequest = async (url) => {
    return new Promise(function (resolve, reject) {
        request(url, function (error, res, body) {
            if (!error && res.statusCode == 200) {
                resolve(body);
            } else {
                reject(error);
            }
        });
    });
}


let createFile = async (data) => {
    let fileName = 'fileName.csv';

    const csvWriter = createCsvWriter({
        path: '/tmp/fileName.csv',
        header: [
            { id: 'date', title: 'Date' },
            { id: 'mac_address', title: 'MAC_Address' },
            { id: 'enter', title: 'Enter' }
        ]
    });

    await csvWriter.writeRecords(data);

    const client = new ftp('ftphost', 21, 'ftp_username', 'ftp_password');

    await client.upload('/tmp/fileName.csv', fileName);
}

exports.handler = async (event, s3FileStreamContent) => {

    let dataExcel = [];
    let url = 'http://example.com/apiUrl';//only for example

    let res = await doRequest(url);
    let data = JSON.parse(res).data;


    dataExcel.push({
        date: data.date,
        mac_address: data.mac,
        enter: data.enter
    });

    createFile(data);
};

运行后的日志:

回复:

请求 ID:

“9c8e1701-ad54-42eb-8dc6-bbed77bc9b41”

功能日志:

START RequestId:9c8e1701-ad54-42eb-8dc6-bbed77bc9b41 版本:$LATEST

END 请求 ID:9c8e1701-ad54-42eb-8dc6-bbed77bc9b41

报告请求 ID:9c8e1701-ad54-42eb-8dc6-bbed77bc9b41 持续时间: 517.98 毫秒计费持续时间:600 毫秒内存大小:128 MB 使用的最大内存:93 MB

无法将文件上传到 ftp 服务器。请帮我。谢谢。

【问题讨论】:

  • 请分享日志,尤其是。那些有错误的人。还要确定一下:您是在 lambda 上为 FTPClient 构造函数提供不同的参数,还是尝试访问localhost
  • @michaelbahr 感谢您的回复。我已经更新了问题。

标签: node.js aws-lambda


【解决方案1】:

请提供您遇到的错误。 可能性如下:

const handler = async (event) => {
   }
  module.exports = { handler }

.AWS lambda 以 aws handler function 开头,希望您已将其包含在您的 aws lambda 代码中 .你如何触发代码。希望您为事件测试配置提供价值。

【讨论】:

  • Manu Vargese 它只是上传模块文件。我的 lambda 函数运行没有任何错误。它可以在'tmp'文件夹下创建csv文件,但不能上传。
猜你喜欢
  • 1970-01-01
  • 2019-02-26
  • 2020-05-18
  • 1970-01-01
  • 2020-01-29
  • 2017-08-26
  • 2012-03-12
  • 1970-01-01
相关资源
最近更新 更多