aws s3节点js sdk方法generatePutUrl返回本地主机和在Heroku上部署的不同结果

问题描述 投票:0回答:1

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

  1. 第一个需要在一个服务器上生成预先签名的URL
  2. 在客户端中使用此URL将图像从浏览器直接上传到S3存储桶
  3. 并最终设法在本地工作。但是当我尝试在heroku上部署服务器时,它开始失败,没有任何原因或可读错误。尝试打印时只是常见的错误和奇怪的消息responseerror 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 ...

但是我不明白它可能在这里产生怎样的影响。我将不胜感激任何有意义的建议如何调试和修复它。谢谢。

我正在尝试根据heroku的建议管理将文件直接上传到S3,首先需要在服务器上生成预签名的URL,然后使用该URL在客户端中从浏览器直接上传图像...

node.js amazon-web-services heroku amazon-s3 image-uploading
1个回答
0
投票
看来您的存储区区域不正确。是不是eu-west-1而不是u-west-1
© www.soinside.com 2019 - 2024. All rights reserved.