Я пытаюсь использовать модуль ssh2 , чтобы взять файл с сервера и добавить его в корзину S3 в AWS.Я хотел бы иметь возможность потоковой передачи файла, чтобы у меня не было его в памяти.Я попробовал следующее:
const Client = require('ssh2').Client;
const aws = require('aws-sdk');
const s3 = new aws.S3();
exports.handler = function(event, context, callback) {
let connSettings = {
host: event.serverHost,
port: event.port,
username: event.username,
password: event.password
};
let conn = new Client();
conn.on('ready', function() {
conn.sftp(true, function(err, sftp) {
if (err) throw err;
let stream = sftp.createReadStream(filename);
let putParams = {
Bucket: s3Bucket,
Key: s3Key,
Body: stream
};
s3.putObject(putParams, function (err) {
if (err) throw err;
console.log("Uploaded!");
});
});
}).connect(connSettings);
};
Однако метод sftp.createReadStream(filename)
ищет мой локальный каталог, а не сервер.Что кроме этого, это работает.
Есть ли способ, как я могу передать файл с сервера на S3?
Я знаю, что мог бы использовать sftp.fastGet способ загрузить файл с сервера, сохранить его локально, а затем загрузить его на S3.Но я бы предпочел не сохранять файл локально.SDK s3 принимает поток, поэтому было бы гораздо удобнее просто передать его.
ОБНОВЛЕНИЕ : метод sftp.createReadStream(filename)
правильно читает с сервера, а не локально.Это метод s3.putObject
, который по какой-то причине пытается получить файл локально, хотя я даю ему поток.