我需要使用带有swagger的NodeJS编写上传代码。要求是创建两个已调整大小的文件并将其发送到AWS S3。我可以通过以下方式做到这一点:
我正在寻找的是动态地从传入流创建调整大小的文件并将它们发送到S3而不保存磁盘上的任何内容。这可能吗?是否有任何模块可以从另一个流创建调整大小的图像流?
我可以从上传的文件中获取流:
var _originalStream = new Buffer(req.swagger.params.uploadedFile.value.buffer, 'binary');
接下来我需要使用上面的流并从中创建两个流。
答案 0 :(得分:0)
您可以使用sharp
:
const sharp = require('sharp');
const fs = require('fs');
let pipeline = sharp();
// temporary files (see text)
let version1 = fs.createWriteStream('output1.jpg');
let version2 = fs.createWriteStream('output2.jpg');
pipeline.clone().resize(800, 600).pipe(version1);
pipeline.clone().resize(320, 240).pipe(version2);
_originalStream.pipe(pipeline).on('finish', () => {
console.log('done');
...upload files to S3 and remove temporary files...
});
如您所见,它可以使用.clone()
直接创建两个(或更多)已调整大小的输出。
此外,您可以使用S3流直接上传文件而不是使用临时文件(我不熟悉S3以提供示例代码,但这不应该太难)。
暂且不说:示例中的_originalStream
不是流,而是Buffer
。您也可以将这些用作sharp
的输入。这可能会奏效:
let pipeline = sharp(req.swagger.params.uploadedFile.value.buffer);
(在这种情况下,您不使用_originalStream.pipe()
)