我的服务器端策略签名代码在此行失败:
credentialCondition = conditions[i]["x-amz-credential"];
(请注意,此代码摘自FineUploader维护者编写的Node示例。我只是通过强制它使用版本4签名而不检查version
参数来对其进行了更改。)
因此,它正在请求正文中寻找一个x-amz-credential
参数,但其他条件不存在。我在开发工具中检查了请求,条件如下:
0: {acl: "private"}
1: {bucket: "menu-translator"}
2: {Content-Type: "image/jpeg"}
3: {success_action_status: "200"}
4: {key: "4cb34913-f9dc-40db-aecc-a9fdf518a334.jpg"}
5: {x-amz-meta-qqfilename: "f86d03fb-1b62-4073-9458-17e1dfd8b3ae.jpg"}
如您所见,没有凭据。这是我的客户端选项代码:
var uploader = new qq.s3.FineUploader({
debug: true,
element: document.getElementById('uploader'),
request: {
endpoint: 'menu-translator.s3.amazonaws.com',
accessKey: 'mykey'
},
signature: {
endpoint: '/s3signaturehandler'
},
iframeSupport: {
localBlankPagePath: '/views/blankForIE9Support.html'
},
cors: {
expected: true,
sendCredentials: true
},
uploadSuccess: {
endpoint: 'success.html'
}
});
我在这里想念什么?
答案 0 :(得分:0)
我通过一种较小的方式更改选项代码来解决此问题:
signature: {
endpoint: '/s3signaturehandler',
version: 4
},
我在签名部分指定了version: 4
。并不是说它在任何地方都有记载,但是显然客户端代码使用它作为是否发送服务器所需密钥信息的标志。