【问题标题】:Having trouble uploading image to AWS s3 bucket with node js使用节点 js 将图像上传到 AWS s3 存储桶时遇到问题
【发布时间】:2020-01-31 02:46:58
【问题描述】:

我正在尝试使用 nodejs 和 aws sdk 将图像上传到 s3。它不断返回一个奇怪的错误:“无法访问主机:`images.dynamodb.us-east-1.amazonaws.com'。此服务可能在 'us-east-1' 区域不可用

这是我的 lambda 代码:

exports.handler = function(event,context,callback){
     var s3 = new AWS.S3();
     const image = event.body.imageBinary;

     var buf = new Buffer.from(image.replace(/^data:image\/\w+;base64,/, ""),'base64');
     const type = image.split(';')[0].split('/')[1];
     var params = {
          Bucket: process.env.BUCKET,
          Key: `${AccountId}.${type}`, 
          Body: buf,
          ContentEncoding: 'base64',
          ContentType: `image/${type}`
      };

      s3.upload(params, function(err, resp){
          if (err) { 
             console.log(err);

          } else {
             console.log('succesfully uploaded the image!: ' + JSON.stringify(resp));

          }
      });
}

我什至尝试设置 AWS 对象配置(使用密钥、密钥和区域)但得到相同的响应

我的 aws sdk 版本:“aws-sdk”:“^2.610.0” 任何帮助都会很好

谢谢!!!

【问题讨论】:

  • 很奇怪。您是否 100% 确定这是导致该错误的代码?您是否正在打包和上传 aws-sdk?试试不上传。 Lambda 运行时包含 aws-sdk(版本稍早,但应该足够了)。
  • images 这个词不应出现在主机名中。听起来好像与您的代码有关。
  • 看起来像是 DNS 问题。您是否位于可能阻止您访问images.dynamodb.us-east-1.amazonaws.com 的防火墙后面?
  • @jarmod 是的,aws sdk 在包中,我什至删除了 node_modules 文件夹并再次安装 npm 并不断收到此错误
  • @JohnRotenstein 我已经多次更改该名称,但它会引发相同的错误

标签: node.js amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

Lambda 支持 node.js v12。这允许您编写async/await 代码

const AWS = require('aws-sdk');
const s3 = new AWS.S3({
  region: 'us-east-1',
  apiVersion: '2006-03-01',
});

exports.handler = async(event,context) => {
 const image = event.body.imageBinary;

 const buf = new Buffer.from(image.replace(/^data:image\/\w+;base64,/, ""),'base64');
 const type = image.split(';')[0].split('/')[1];

 var params = {
      Bucket: process.env.BUCKET,
      Key: `${AccountId}.${type}`, 
      Body: buf,
  };

  const options = {
    ACL: 'private',
    CacheControl: 'max-age=86400',
    ContentType: `image/${type}`,
    ContentEncoding: 'base64',
  };

  await s3.upload(params, options).promise();
}

【讨论】:

  • 这应该是评论而不是答案。这是个好主意,但它没有解决问题。
猜你喜欢
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 2016-03-18
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2023-02-04
相关资源
最近更新 更多