gpt4 book ai didi

amazon-web-services - 如何使用amazonka presignURL

转载 作者:行者123 更新时间:2023-12-05 07:39:58 25 4
gpt4 key购买 nike

我正在努力掌握 amazonka图书馆。我想为 S3 预签名 PUT 请求。看着 example here ,我把下面的代码放在一起。尝试从客户端发送 JPEG 图像时它不起作用。 AWS 提示签名不正确。

我的客户端代码使用 nodejs aws sdk,所以我只能猜测我在这里配置不正确。

<Error>
<Code>
SignatureDoesNotMatch
</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
<CanonicalRequest>
PUT
/my-bucket/test.jpg
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-
Credential=[MY_AWS_ACCESS_KEY]%2F20171010%2Feu-west-
1%2Fs3%2Faws4_request&X-Amz-Date=20171010T084724Z&X-Amz-
Expires=100000&X-Amz-SignedHeaders=expect%3Bhost
expect:
host:s3-eu-west-1.amazonaws.com

expect;host
UNSIGNED-PAYLOAD
</CanonicalRequest>
...

这是我的代码:

getS3UrlR :: Handler Value
getS3UrlR = do
y <- getYesod
let settings = appSettings y

env <- newEnv $ FromKeys (AccessKey $ encodeUtf8 $ appAwsAccessKey settings) (SecretKey $ encodeUtf8 $ appAwsSecretKey settings)
ts <- liftIO $ getCurrentTime

let b = BucketName $ appS3Bucket settings
k = ObjectKey "profile-pic-test"
url <- liftIO $ runResourceT . runAWST env . within Ireland $ presignURL ts 100000 (putObject b k (toBody ("" :: ByteString)))
return $ toJSON $ decodeUtf8 url

我该如何调试它?

注意 - putObject 需要一个 RqBody 参数,但我没有提供(因为客户端将提供请求主体)。所以我只提供了一个空字符串。这会是个问题吗?

编辑 - 我尝试签署 GET 请求以查看是否可行。它工作正常!但是 PUT 没有。这是可以正常工作的更改行:

url <- liftIO $ runResourceT . runAWST env . within Ireland $ presignURL ts 100000 (getObject b k)

最佳答案

我发现了 2 月的一个问题,这让我找到了解决方法。似乎 presignURL 正在向签名 URL 添加一个无关的 header 。当我重写请求以在签名之前删除 Expect header 时,生成的 URL 使用简单的 PUT。

我的解决方法包含在 my comment on the github issue 中.

关于amazon-web-services - 如何使用amazonka presignURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com