我正在尝试使用cloudfront作为端点进行分段上传,我知道这是可能的(https://github.com/aws/aws-sdk-js/issues/423),而且我还在aws-sdk-js的Github上打开了一张票,我不知道我是否遗漏了一些配置选项,或其他什么,但我无法使用aws sdk多部分上传功能通过Cloufront上传,我总是在PUT请求上获得503。
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<AWSAccessKeyId>...</AWSAccessKeyId>
<StringToSign>POST
application/octet-stream; charset=UTF-8
x-amz-acl:private
x-amz-date:Tue, 28 Jul 2015 15:22:01 GMT
x-amz-user-agent:aws-sdk-js/2.1.40
/bucket-name/test_797965294</StringToSign>
<SignatureProvided>...</SignatureProvided>
<StringToSignBytes>....</StringToSignBytes><RequestId>7488F0A2F70E4AC5</RequestId>
<HostId>...</HostId>
</Error>
我正在使用以下代码启动多部分上传:
AWS.config.update({
accessKeyId: 'XXXXXXXXXXXXXXXXX',
secretAccessKey: 'XXXXXXXXXXXXXXXXXX'
});
var s3Client = new AWS.S3({
endpoint: 'XXXXXXXX.cloudfront.net',
s3BucketEndpoint: true,
region: 'eu-west-1'
});
var TEMP_filename = 'test_' + Math.floor(1000000000*Math.random());
var params = {
Bucket: 'bucket-name',
Key: TEMP_filename,
ACL: 'private'
};
s3Client.createMultipartUpload(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
} else {
console.log(data); // successful response
}
});
我是否遗漏了客户端配置中的内容?
值得一提的是,在使用AWS.S3.ManagedUpload时,几乎所有内容都能正常运行。如果文件大小小于进行分段上传所需的文件大小,一切正常,但是当切换到分段上传时,一切都会中断。它总是在POST请求上,PUT请求似乎工作正常。
这似乎有用的唯一方法是使用putObject
,使用此函数我没有任何问题,但我需要恢复支持,而这只能通过分段上传来实现。< / p>
BTW,我正在使用最新版本的SDK:aws-sdk-js / 2.1.40
答案 0 :(得分:1)
有人回复了我在github(https://github.com/aws/aws-sdk-js/issues/669)上打开的故障单,这个问题是云端的错误配置。
要启用分段上传,我们需要在Cloudfront Web分发上配置转发查询字符串。
启用此功能并等待部署Cloudfront发行版后,一切都运行良好。