NodeJS 将映像从节点存储到aws s3,以便在heroku中部署

6fe3ivhb  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(123)

你好,我想在亚马逊s3中存储图像。我正在制作一个带有节点js和后端express的react应用程序。我有一个在本地保存图像的代码,在图像文件夹中按需。我正在使用jimp库将图像转换为白色。我想要的是将这些黑白图像直接存储到aws而不是保存到本地硬盘。我需要这样做,因为最终应用程序必须部署到heroku,而heroku无法从本地硬盘读取图像。
下面是代码,通过它我能够根据需要将图像存储在特定目录中。

const input = req.body.input;
google.list({
    keyword: input,
    num: 15,
    detail: true,
})
.then(function (res) {
    res.map((data,index)=>{
      const url = data.url;
      const extension = url.split('.')[url.split('.').length-1]
      const foldername=input

      Jimp.read(url, function (err, image) {
          image.resize(250, 250)
          .greyscale()      
         .write(path.join(__dirname,"../../public/images/"+foldername+"/"+foldername+index+"."+extension));
        });
      });

    })
}).catch(function(err) {
          res.send('There was some error')
      })

我需要在相同的路径即存储图像。,awsbucketname/foldername/foldername.jpg。我试图将图像转换到缓冲区,但我仍然不明白如何继续下去。有人请帮助我:(

2ul0zpep

2ul0zpep1#

(免责声明:我没有与Jimp的实际经验!)
看起来你在将图像写入缓冲区而不是本地文件的方向上走对了。一旦你初始化了AWS SDK并示例化了S3接口,就应该很容易将缓冲区传递给upload函数了。

const s3 = new AWS.S3({ params: { Bucket: 'yourBucketName' } });

// ...

Jimp.read(url, (err, image) => {
  const bucketPath = `/${foldername}/${index}.${extension}`;
  image.resize(250, 250)
    .greyscale()      
    .getBuffer(Jimp.AUTO).then(buffer => {
      s3.upload({ Key: bucketPath, Body: buffer })
        .then(() => console.log('yay!'));
    });
  }
);

这只是一个草图,当然,遗漏错误处理等。

相关问题