将节点中的图像存储到aws s3以在heroku中部署

时间:2018-02-09 10:36:28

标签: node.js reactjs heroku amazon-s3

您好我想在亚马逊s3中存储图片。我正在使用节点js做出反应应用程序并在后端表达。我有一个代码,可以根据需要在图像文件夹中本地保存图像。我正在使用jimp库将图像转换为黑白图像。我想要的是将这些黑白图像直接存储到aws而不是保存到本地硬盘。我需要这样做,因为最终必须将应用程序部署到heroku,而heroku无法从本地hdd读取图像。

以下是我可以根据需要将图像存储在特定目录中的代码。

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。我尝试将图像转换为缓冲区,但我仍然不明白如何继续使用它。有人请帮助我:(

2 个答案:

答案 0 :(得分:0)

(免责声明:我对Jimp没有实际经验!)

您似乎正在编写图像to a buffer而不是本地文件。初始化AWS开发工具包并实例化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!'));
    });
  }
);

这只是草图,当然缺少错误处理等。

答案 1 :(得分:0)

这是在我编写的全堆栈MERN应用程序上执行此操作的代码。我认为略读此处包含的代码段可能会有所帮助。如果没有,我道歉!

https://link.medium.com/U1SdsoHMy2