当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda nodejs将文件上传到ftp

钱瑞
2023-03-14

我正在使用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”

函数日志:

开始请求id:9c8e 1701-ad54-42e b-8dc 6-bbed 77 BC 9 b 41版本:$最新

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

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

它不能上传文件到ftp服务器。请帮帮我。谢谢。

共有1个答案

上官扬
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 我试图一次将许多文件上传到我的CherryPy服务器。 我正在按照本教程在服务器端显示PHP代码。 JavaScript部分很简单。这是它的摘要: 我将本教程中描述的内容翻译成如下形式: 当服务器收到请求时,我可以看到 这就是我要上传的文件的长度,因此我假设整个文件已发送到服务器。 如何获取文件的内容? 问题答案: 至少看起来像下面这样。在Firefox和Chromium中进行了测试。

  • 是否可以使用google drive api更改一个大文件,只上传更改的部分文件,而不是整个文件?我试图在API文档中找到关于它的信息,但只支持在连接重置后继续上传。它似乎是一个重要的特征。

  • 问题内容: 我创建了一个从有权访问的FTP服务器下载文件的功能。如何将文件上传回FTP服务器? 以下是我使用的download_files方法: 问题答案: 使用Apache Commons Net库中的FTPClient类。 这是一个带有示例的代码段: 摘录自http://www.kodejava.org/examples/356.html

  • 问题内容: 实际上,我正在使用带有Angular 2编码的接口的Spring REST API。 我的问题是我无法使用Angular 2上传文件。 我在Java中的Webresources是: 当我通过带有Auth标头等的URL请求调用它时(它具有适用于Chrome的Advanced Rest Client扩展),它完全可以正常工作 证明:(在这种情况下,一切正常) Spring配置文件和Pom依

  • 问题内容: 我遵循以下文档以将文件上传到Google云端硬盘:https : //developers.google.com/drive/android/files 现在,每次我要上传文件时,都会出现Google云端硬盘的弹出窗口,问我将其上传到哪里以及哪个名字。我不希望弹出窗口,我想直接上传文件。 有什么方法可以做到这一点?我找不到任何文档。我也发现了这一点:https : //develope

  • 问题内容: 尝试将文件上传到S3存储桶时遇到问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 SDK从Node.js上载到S3。 这些是我的路线设置: 这是items.upload()函数: 将param 设置为类似字符串的效果很好。根据doc,param必须获取 (缓冲区,类型数组,Blob,字符串,ReadableStream)对象数据。 但是,上传文件对象失败,并显示