node.js - aws s3 Node js sdk 方法 generatePutUrl 返回 localhost 和 heroku 上部署的不同结果

标签 node.js amazon-web-services heroku amazon-s3 image-uploading

我正在尝试根据 heroku recomendations 管理将文件直接上传到 S3

  • 第一个需要在服务器上生成预签名 URL
  • 在客户端使用此 url 将图像从浏览器直接上传到 S3 存储桶

  • 最后设法在本地工作。
    但是当我尝试在 heroku 上部署服务器时,它开始无缘无故地失败或出现可读错误。当我尝试打印时只是常见的错误和奇怪的消息
    response
    error message in console

    当我从本地主机或 Heroku 调用电话时,预签名的网址完全不同,这对我来说看起来很奇怪
    localhost 的响应如下所示:
    https://mybucket.s3.eu-west-1.amazonaws.com/5e3ec346d0b5af34ef9dfadf_avatar.png?AWSAccessKeyId=<AWSKeyIdHere>&Content-Encoding=base64&Content-Type=image%2Fpng&Expires=1581172437&Signature=xDJcRBiA%2FmQF1qKhBZrnhFXWdaM%3D
    

    heroku 部署的响应如下所示:
    https://mybucket.s3.u-west-1.amazonaws.com/5e3ee2bd1513b60017d85c6c_avatar.png?Content-Type=image%2Fpng&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<credentials-key-here>%2F20200208%2Fu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20200208T163315Z&X-Amz-Expires=900&X-Amz-Signature=<someSignature>&X-Amz-SignedHeaders=content-encoding%3Bhost
    

    服务器代码几乎就像在示例中一样:
    const Bucket = process.env.BUCKET_NAME
    const region = process.env.BUCKET_REGION
    
    AWS.config = new AWS.Config({
    accessKeyId: process.env.S3_KEY,
    secretAccessKey: process.env.S3_SECRET,
    region,
    logger: console
    })
    
    const s3 = new AWS.S3()
    
    async function generatePutUrl(inputParams = {}) {
      const params = { Bucket, ...inputParams }
      const { Key } = inputParams    
      const putUrl = await s3.getSignedUrl('putObject', params)
      const getUrl = generateGetUrlLocaly(Key)
    
      return {putUrl, getUrl}
    }
    

    我能想象的唯一区别是 SSL - 我运行本地服务器 VIA http,heroku 默认通过 https...

    但我不明白它会如何影响这里。
    我将不胜感激任何有意义的建议如何调试和修复它。
    谢谢。

    最佳答案

    您的存储桶区域看起来不正确。不应该是eu-west-1而不是 u-west-1 ?

    关于node.js - aws s3 Node js sdk 方法 generatePutUrl 返回 localhost 和 heroku 上部署的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60129464/

    相关文章:

    javascript - mongodb date蒙古Deadbeef

    javascript - 在内部测试套件之间传递数据

    node.js - 带有 Async/Await 的 NodeJS 中类似分类帐的顺序条目

    amazon-s3 - 当用户上传到S3存储桶时得到通知吗?

    amazon-web-services - AWS Dynamo无法自动缩减

    python - sqlalchemy.exc.OperationalError : (sqlite3. OperationalError)尝试创建数据库时无法打开数据库文件错误

    mongodb - 生产中的MongoDB中的白名单IP地址

    node.js - Sequelize 模型单元测试

    heroku - 无法克隆我的 heroku 项目

    ruby-on-rails - Heroku Postgresql 抛出 PG::DiskFull