Я разрабатываю конвейер, который выглядит следующим образом -
(NodeJS) Загрузка файла -> S3 -> Лямбда (записывается в nodejs, запускается из файла: созданное событие) -> Java Server (с использованием CXF / JAX-RS). Мы надеемся, что Lambda сможет избежать загрузки большого файла в память, прежде чем пересылать его на мой Java-сервер. Есть метаданные, связанные с файлом S3, которые мне также нужны, прежде чем связываться с моим Java-сервером (поэтому я не могу просто переслать поток, мне нужно проверить связанные метаданные и затем переслать содержимое файла вместе).
Я читал документы AWS (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property),, что заставило меня поверить, что s3.getObject (). CreateReadStream (), вероятно, мой лучший выбор для загрузки содержимого файла без загрузки всего файла Я заметил, что createReadStream () может быть передан по каналу, но я не добился успеха в том, чтобы заставить канал работать как часть многоэтапной загрузки (что, я думаю, мне нужно сделать). pipe () может работать только с записываемыми файловыми потоками.
var requestToJavaService = https.request(options, res => {
console.log('Service Response statusCode:', res.statusCode);
console.log('Service Response headers:', res.headers);
res.setEncoding('utf8');
res.on('data', chunk => {
console.log('Service Response: ' + chunk);
});
res.on('end', () => {
console.log('Connection to Service closed');
});
res.on('error', e => {
callback(new Error(e));
console.log('Encountered an error while attempting to connect to Service: ' + e.message);
});
});
s3.getObject({ Bucket: srcBucket, Key: srcKey })
.createReadStream()
.on('error', function(err) {
console.log('encountered error from s3 read: ' + err);
})
.pipe(
requestToJavaService,
{ end: true }
)
Я не женат ни на одной из идей, которые я изложил здесь, поэтому любые дополнительные комментарии / предложения будут очень благодарны.