我正在开发看起来像这样的管道-
(NodeJS)文件上传-> S3-> Lambda(用nodejs编写,从file:created事件触发)-> Java Server(使用CXF / JAX-RS)。希望Lambda可以避免在将大文件转发到我的Java服务器之前将其加载到内存中。在联系Java服务器之前,我还需要与S3文件关联的元数据(因此,我不能只转发流,还需要签出关联的元数据,然后再转发文件内容)。
我一直在阅读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 }
)
我不喜欢在这里提出的任何想法,因此,我们将不胜感激任何其他投入/建议。