【问题标题】:Storing images from node to aws s3 to be deployed in heroku将图像从节点存储到 aws s3 以部署在 heroku 中
【发布时间】:2026-01-06 00:40:01
【问题描述】:

您好,我想将图像存储在 amazon s3 中。我正在使用节点 js 制作一个反应应用程序并在后端表达。我有一个代码,可以根据需要将图像保存在本地图像文件夹中。我正在使用 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。我尝试将图像转换为缓冲区,但我仍然不明白如何继续它。有人请帮助我:(

【问题讨论】:

    标签: node.js reactjs heroku amazon-s3


    【解决方案1】:

    (免责声明:我对 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!'));
        });
      }
    );
    

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

    【讨论】:

      【解决方案2】:

      这是在我制作的全栈 MERN 应用程序上执行此操作的代码。我认为略读此处包含的代码 sn-ps 可能会有所帮助。如果没有,我很抱歉!

      https://link.medium.com/U1SdsoHMy2

      【讨论】:

      • 欢迎来到 Stack Overflow!虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
      最近更新 更多