繁体   English   中英

使用AWS-SDK-JS通过CloudFront分发进行S3分段上传

[英]S3 Multipart upload via cloudfront distribution with aws-sdk-js

我正在尝试使用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
    }
});

结果是: Google控制台的网络输出

索取详细资料

我在客户端的配置中缺少什么吗?

还值得一提的是,在使用AWS.S3.ManagedUpload时,几乎所有功能都能完美运行。 如果文件大小小于进行分段上传所需的文件大小,则一切正常,但切换到分段上传时,一切都会再次中断。 它总是在POST请求上,PUT请求似乎可以正常工作。

这似乎可行的唯一方法是使用putObject ,使用此函数我没有任何问题,但是我需要恢复支持,并且只能通过分段上传来实现。

顺便说一句,我正在使用最新版本的SDK:aws-sdk-js / 2.1.40

有人回应了我在github( https://github.com/aws/aws-sdk-js/issues/669 )上打开的故障单,该问题是在Cloudfront上的错误配置。

要启用分段上传,我们需要在Cloudfront Web分发上配置正向查询字符串。

启用此功能后,等待部署Cloudfront分发,一切都将正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM