Node.js 如何使用节点js将图像从s3.getObject(params.createReadStream()输出到HTML

Node.js 如何使用节点js将图像从s3.getObject(params.createReadStream()输出到HTML,node.js,express,amazon-s3,filesystems,Node.js,Express,Amazon S3,Filesystems,我一直在尝试使用multer将一个图像上传到s3,并使用下面的代码成功地将其下载到本地路径 routes.post('/updownload', upload.array('file'), function (req, res) { var params = { Bucket: "*******", Key: "image1.jpeg" }; var file = fs.createWriteStream('./uplo

我一直在尝试使用multer将一个图像上传到s3,并使用下面的代码成功地将其下载到本地路径

routes.post('/updownload', upload.array('file'), function (req, res) {   
    var params = {  
        Bucket: "*******",  
        Key: "image1.jpeg"  
       };  
var file = fs.createWriteStream('./uploads/file4.jpeg');                     

 s3.getObject(params)  
.createReadStream()  
.on('error', function (err) {                   
         console.log('Error reading file: ' + err.message);
         file.end();
        })                 
        .pipe(file)  
        .on('error', function (err) {   
            err = true;  
            console.log('Error writing file:' + error.message);  
            file.end();   
        })   
        .on('finish', function (err) {                        
            file.end();   
            if (!err) {   
                console.log('Successfully downloaded file from S3');  
            }  
    });    
}); 
但是,我不确定,如何根据下载图像的成功/失败,使用诸如标题、正文、内容类型、状态代码和状态消息等参数将响应发送回HTML。 如果我走的是正确的道路,请帮助我并让我知道

在向客户机发送响应之前,您需要完全等待来自S3的事件发射器完全完成。 获得数据后,需要将可读流转换为缓冲区,并根据下载的文件确定ContentType并使用:res.sendBuffer:
另请参见

我知道,回答这个问题已经有相当长的时间了。但是我想,这会帮助一些人。我能够通过以下代码解决问题:

const params = {
      Bucket: '*********',
      Key: image1.jpeg,
    };

    res.set('Content-Type', 'image/jpeg');
    res.set('Content-Type', 'image/jpg');
    res.set('Content-Type', 'image/png');


    const stream = s3.getObject(params).createReadStream();
    stream.on('error', err => {
      logger.log({ level: 'error', messsage: 'stream error', error: `${err}` });
    });
    stream.pipe(res);

基于您的第一点,我可以处理发送给客户端的响应。在'finish'上,函数err{}对吗?如何获取数据?或者有没有更好的方法直接从s3读取文件并在前端显示?您需要查看s3 SDK的文档。我没用过它,所以我不能给出确切的答案。简而言之,上面的答案就是你需要做的。