node.js - 在 Minio 上上传带有预签名放置对象链接的元数据
问题描述
我有一个使用 minio 的 nodejs 客户端生成预签名 URL 的端点。
client.presignedPutObject('my_bucket', 'my_object', 24 * 60 *60 , (err, url) => {});
当我使用 URL 使用 curl 上传文件时,它可以工作。
curl -X "PUT" "http://127.0.0.1:9000/uploads/f72cd073-b0f5-4ca7-9d34-73c5199a85a3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=Q3AM3UQ867SPQQA43P2F%2F20200610%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200610T195808Z&X-Amz-Expires=30&X-Amz-SignedHeaders=host&X-Amz-Signature=5fa4ad5fc550d0418a6087782695d5e805449518e87a9d9314ce91d161193d54 \
-H 'Content-Type: application/octet-stream'
但我也想上传一些额外的元数据。
当我向请求添加 x-amz-meta-foo 标头时,请求失败,因为签名不匹配
要求:
curl -X "PUT" "http://127.0.0.1:9000/uploads/f72cd073-b0f5-4ca7-9d34-73c5199a85a3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=Q3AM3UQ867SPQQA43P2F%2F20200610%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200610T195808Z&X-Amz-Expires=30&X-Amz-SignedHeaders=host&X-Amz-Signature=5fa4ad5fc550d0418a6087782695d5e805449518e87a9d9314ce91d161193d54&x-amz-meta-foo=bar" \
-H 'Content-Type: application/octet-stream'
回复:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<Key>f72cd073-b0f5-4ca7-9d34-73c5199a85a3</Key>
<BucketName>uploads</BucketName>
<Resource>/uploads/f72cd073-b0f5-4ca7-9d34-73c5199a85a3</Resource>
<RequestId>1617470A098B126C</RequestId>
<HostId>70ed9ca4-79ec-4b45-9631-6ddefe2a3ede</HostId>
</Error>
有没有办法做到这一点?
使用 minio nodejs 客户端 7.0.16 和 minio 2020-06-03T22:13:49Z
解决方案
您收到SignatureDoesNotMatch
错误是因为您在生成预签名 URL 时使用的标头应该与您在请求中使用的标头匹配。意思是如果你x-amz-meta-foo
在请求中使用header,你应该在生成预签名URL时使用这个header。
推荐阅读
- javascript - 如何对 Google Ads 进行 api 调用
- android - Mapbox:空闲几分钟后得到 ANR
- excel - 关闭用户窗体时需要关闭 Excel
- maven - 在 Maven 中执行依赖项中定义的构建插件
- php - 如何修复 laravel 中 ixudra/curl 中的错误且响应不正确
- typescript - Loopback 4 控制器 省略
- c# - 事件 KeyDown/KeyPress/KeyUp 如何获取按下按钮的名称?
- amazon-web-services - AWS CodeBuild 服务的 CIDR 范围是多少?
- python - 如何从 conda 中删除 env 目录?
- android - 如何在静态方法中正确使用静态布尔值