gpt4 book ai didi

javascript - 使用 SSH2 和 SFTPStream 将文件从服务器流式传输到 AWS S3 存储桶

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:52 27 4
gpt4 key购买 nike

我正在尝试使用 ssh2模块从服务器获取文件并将其添加到 AWS 中的 S3 存储桶。我希望能够流式传输该文件,这样我就不必将其保存在内存中。我尝试了以下方法:

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。但我不想在本地保存文件。 s3 SDK 接受流,因此直接流式传输会方便得多。

更新:方法sftp.createReadStream(filename) 正确地从服务器读取,而不是本地读取。这是 s3.putObject 方法,由于某种原因尝试在本地获取文件,即使我给它一个流。

最佳答案

出于某种原因,方法s3.putObject正在本地查找文件,即使我给了它一个流。该流包含来自服务器的路径,但无论出于何种原因,当 s3.putObject 方法读取流时,它会尝试在本地读取文件。

我通过使用 s3.upload 方法解决了这个问题。

s3.upload(putParams, function (err) {
if (err) throw err;

console.log("Uploaded!");
});

关于javascript - 使用 SSH2 和 SFTPStream 将文件从服务器流式传输到 AWS S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53601650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com