node.js - aws s3 node js sdk方法generatePutUrl为本地主机和heroku上的部署返回不同的结果

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

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

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

最终成功在本地运行。 但是当我尝试在 Heroku 上部署服务器时,它开始失败,没有任何原因或可读错误。当我尝试打印它时,只是常见错误和奇怪的消息 response error message in console

当我从本地主机或从heroku调用电话时,预签名的网址完全不同,这对我来说看起来很奇怪 本地主机的响应如下所示:

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 - 我通过 http 运行本地服务器,而 heroku 默认情况下通过 https...

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

最佳答案

您的存储桶区域似乎不正确。难道不应该是 eu-west-1 而不是 u-west-1 吗?

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

相关文章:

Node.js Swagger 生成 UI 文档 JSON 提要

node.js - Mongoose 按用户名和类型对数组中的元素进行计数

java - 读取 GoogleSignIn 的 awsconfiguration.json 时出错

Python boto3 : receive versionId after uploading a file to S3

javascript - Node js 在 foreach 中未定义?

javascript - nuxt 项目 onvercel 中的 process.env.URL null

amazon-web-services - 当消息发布到SQS时如何触发lambda?

macos - Postgres.app 无法启动

具有自定义域 : No such app 的 herokudns

multithreading - Sidekiq 在单个 heroku dyno 中运行多个作业?