gpt4 book ai didi

javascript - minio 预签名 put 与 superagent 结果为 403

转载 作者:行者123 更新时间:2023-11-30 08:28:04 29 4
gpt4 key购买 nike

我正在尝试编写一个基本测试,以确保我的 minio 安装正常工作。我按照他们使用 presigned POST policy 的示例编写了一个测试它工作得很好,但我似乎无法创建预签名 PUT 的工作示例。我收到 403 Forbidden ,原因如下:

cause="Signature does not match" 
source="[objecthandlers.go:468:objectAPIHandlers.PutObjectHandler()]"

这是测试代码。我已经 promise 了 minio javascript API 并使用磁带作为测试工具。 POST 策略的类似代码工作得很好。

编辑:这是问题根源的重要部分:

var minio = new Minio.Client({
endPoint: 'minioTest', // <- the problem
port: 9000,
secure: false,
accessKey: 'DONALDJTRUMP',
secretKey: 'DONALDJTRUMP'
});

test('should be able to PUT to a presigned URL', function(assert) {

const filename = 'signedtest2.txt';

return minio.presignedPutObjectAsync(bucket, filename, 60)
.then(url => {
assert.ok(url.length > 200, 'URL is non empty');
console.log(url);
return agent
.put(url)
.set('Content-Type', 'text/plain')
.attach('file', 'test/data/test.txt');
}).then(r => {
assert.ok(r.ok);
console.log(JSON.stringify(r, null, 2));
}).catch(err => {
assert.fail('got error', err);
console.log(err);
});
});

我做错了什么导致我收到 403 Forbidden 错误?

最佳答案

SuperAgent、minio-js 或 minio 服务器不喜欢在主机名(端点)中包含大写字符。唉,我使用的是 docker,它会自动分配主机名,因此如果您使用驼峰命名法作为容器名称,则允许这样做,而我只是剪切并粘贴了容器名称。

将此行更改为小写可以解决问题:

endPoint: 'miniotest',     // <- this must be lower case

主机名是 case insensitive所以这应该不重要..我还没有确定它是哪个组件,但在生成或验证签名时可能会强制转换为小写,因此它们不匹配。

我注意到我不必将容器更改为驼峰命名法。

关于javascript - minio 预签名 put 与 superagent 结果为 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42050505/

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