使用 Lambda(节点)将图像从 SFTP 复制到 S3

Copy images from SFTP to S3 using Lambda (node)

我正在使用 'ssh2-sftp-client' 来完成这项工作。所以基本上,如果我先将文件复制到 Lambda 的 /tmp/ 文件夹,然后将其上传到 s3,它就可以正常工作。我想将读取流指向 s3 而不保存在 lambda /tmp/ 文件夹中。

所以基本上:

let sftp = new Client();
sftp.connect({
    host: Config.host,
    port: Config.port,
    username: Config.user,
    password: Config.password
}).then(() => {
    return sftp.list('/photos');
}).then((files) => {
    return get(files)
}).then((streams) => {
     return streamToString(streams)
}).then((dataArray) => {
    return uploadToS3.putBatch(Config,dataArray)
}).then(() => {
    return cleanSFTP();
}).then(() => {
    context.done();
}).catch((err) => {
    console.log('Catch Error: ', err);
    context.fail();
});

从 sftp 获取读取流:

  function get(files) {
        return Promise.all(files.slice(0, 2).map((file) => {
            fileList.push(file.name);
            return sftp.get(BASIC_URL + '/' + file.name);
        }));
    }

串流到字符串:

 var streamToArray = require('stream-to-array')
module.exports = function (fileStreams) {
  return Promise.all(fileStreams.map((file) => {
    return fileToArray(file)
  }))
}


function fileToArray(fileStream) {
  return streamToArray(fileStream)
    .then((fileArray) => {
      return {data: fileArray, key: fileStream.path}
    })
    .catch((err) => {
      return err
    })
}

正在上传到 s3:

var AWS = require('aws-sdk')
AWS.config.setPromisesDependency(require('bluebird'));

function putBatch(config, files) {

  var s3 = new AWS.S3();
  // Make all the putObject calls immediately
  // Will return rejected promise if any requests fail
  return Promise.all(files.map((file) => {
    if (typeof file.key && file.data !== undefined) {
      var params = {
        Bucket: config.bucket,
        Key: "preix/" + file.key,
        Body: file.data
      };
      return s3.putObject(params).promise()
    }
  }));
};

使用此方法将图像复制到 s3,但它们的大小与 sftp 中的不同,因此无法预览图像。

有什么想法吗?

我使用了 s3-sftp-bridge,它可以无缝运行。

https://github.com/gilt/s3-sftp-bridge

只需要带有凭据的 s3 位置和 sftp 位置,它会自动同步。

希望对您有所帮助。