使用node.js迁移到s3存储

Moving to s3 storage with node.js

本文关键字:s3 存储 迁移 node js 使用      更新时间:2023-09-26

我正准备将一个node.js应用程序移动到生产环境中(我正在使用Heroku)。用户通过url向网站添加图片。现在它们只是保存在服务器上-我想将存储移动到s3,但我有一些困难。

这个想法是先将图像保存到磁盘,然后上传它,但是我正在努力找到一种方法来通知当文件已经完成写入磁盘。它似乎没有使用典型的节点回调样式。

下面是现在的代码。我正在使用请求节点模块,这可能会使事情复杂化,而不是简化它们:
    requestModule(request.payload.url).pipe(fs.createWriteStream("./public/img/submittedContent/" + name));
                // what do I do here?
                fs.readFile("./public/img/submittedContent/" + name, function(err, data){
                if (err) { console.warn(err); }
                else {
                    s3.putObject({
                        Bucket: "submitted_images",
                        Key: name,
                        Body: data
                     }).done(function(s3response){
                        console.log("success!");
                        reply({message:'success'});
                    }).fail(function(s3response){
                        console.log("failure");
                        reply({message:'failure'});
                    });
                }
            });

任何建议将不胜感激。谢谢!

尝试监听可写流上的finish事件:

requestModule(request.payload.url).pipe(fs.createWriteStream("./public/img/submittedContent/" + name)).on('finish', function(){
    // do stuff with saved file
});

除非要修改图像,否则不应该上传到Heroku,而应该直接上传到S3。

参见在Node.js中直接向S3上传文件