为什么 fineUploader 没有在请求条件中发送 x-amz-credential 属性?
Why isn't fineUploader sending an x-amz-credential property among the request conditions?
我的服务器端策略签名代码在此行失败:
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'
}
});
我在这里错过了什么?
我通过以一种小的方式更改我的选项代码来修复此问题:
signature: {
endpoint: '/s3signaturehandler',
version: 4
},
我在签名部分指定了version: 4
。并不是说这在任何地方都有记录,但显然客户端代码使用它作为是否发送服务器所需的关键信息的标志。
我的服务器端策略签名代码在此行失败:
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'
}
});
我在这里错过了什么?
我通过以一种小的方式更改我的选项代码来修复此问题:
signature: {
endpoint: '/s3signaturehandler',
version: 4
},
我在签名部分指定了version: 4
。并不是说这在任何地方都有记录,但显然客户端代码使用它作为是否发送服务器所需的关键信息的标志。