我正在尝试根据heroku recomendations管理直接文件上传到S3的操作>
并最终设法在本地工作。但是当我尝试在heroku上部署服务器时,它开始失败,没有任何原因或可读错误。尝试打印时只是常见的错误和奇怪的消息
对于我来说,当我从本地主机或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在客户端中从浏览器直接上传图像...
eu-west-1
而不是u-west-1
?