直接到S3上传错误

时间:2017-08-16 23:06:21

标签: heroku amazon-s3

我在使用Heroku应用程序时遇到过直接问题,直接进行了s3设置。我使用了本教程(https://devcenter.heroku.com/articles/s3-upload-node),并且已经将所有代码都用于后端:

const AWS = require('aws-sdk');
const awsconfig = new AWS.Config({
  accessKeyId: process.env.AWS_KEY, 
  secretAccessKey: process.env.AWS_SECRET, 
  region: 'us-east-1'
});
const s3 = new AWS.S3({
  params: { Bucket: process.env.S3_BUCKET }
});

router.get('/sign-s3', function(req, res) {
  const fileName = req.query['file-name'];
  const fileType = req.query['file-type'];
  const s3Params = {
    Key: fileName,
    Expires: 60,
    ContentType: fileType,
    ACL: 'public-read'
  };

  s3.getSignedUrl('putObject', s3Params, function(err, data) {
    if(err){
      console.log(err);
      return res.end();
    }
    const returnData = {
      signedRequest: data,
      url: `https://${process.env.S3_BUCKET}.s3.amazonaws.com/${fileName}`
    };
    res.write(JSON.stringify(returnData));
    res.end();
  });
});

问题是,这非常适合上传用户个人资料图片,直到我尝试将相同的设置用于其他应用程序。我有三个运行的Heroku应用程序,因为应用程序共享数据,所以需要使用相同的存储桶进行上传。一旦我尝试使用相同的设置(包括重用AWS Key和AWS密码),当我尝试上传时,BOTH应用就开始抛出此错误:

{ 
[CredentialsError: Missing credentials in config]
  message: 'Missing credentials in config',
  code: 'CredentialsError',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  originalError: {
    message: 'Could not load credentials from any providers',
    code: 'CredentialsError',
    errno: 'ECONNREFUSED',
    originalError: {
      code: 'ECONNREFUSED',
      errno: 'ECONNREFUSED',
      message: 'connect ECONNREFUSED *IP LISTED HERE*' 
    }
  }
}

结果,两者都将未定义的json返回到应用程序的前端。我尝试了几种不同的方式重新配置存储桶的权限,并创建了一个单独的IAM用户配置文件,以便与第二个应用程序一起使用,但我仍然无法让任何一个人再次接受上传。有谁知道可能导致这种情况的原因是什么?我唯一的猜测是,通过允许应用程序共享AWS密钥,我创建了某种权限错误,但我不确定如何修复它。

一如既往,感谢任何帮助 - 谢谢!

1 个答案:

答案 0 :(得分:0)

对于那些可能使用较旧版本的Heroku教程的人来说,问题是它已经更新,现在AWS配置变量会自动加载到new.aws.S3();

所以按照上面的定义来定义它们:

const awsconfig = new AWS.Config({
  accessKeyId: process.env.AWS_KEY, 
  secretAccessKey: process.env.AWS_SECRET, 
  region: 'us-east-1'
});

抛出错误 - 可能会覆盖已设置的变量。希望这有助于某人!