当前位置: 首页 > 知识库问答 >
问题:

使用aws-sdk-js通过cloudfront发行版进行S3多部分上传

胡向阳
2023-03-14

我试图使用cloudfront作为endpoint进行多部分上传,我知道这是可能的(https://Github.com/aws/aws-sdk-js/issues/423),我也在aws-sdk-js的Github上开了一张罚单,我不知道我是否缺少了一些配置选项,或者其他什么,但我不能使用aws sdk多部分上传函数在cloudfront上传,我总是在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
    }
});

我在客户端的配置中是否遗漏了什么?

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

共有1个答案

徐飞龙
2023-03-14

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

为了启用多部分上传,我们需要在Cloudfront Web deStribution上配置前向查询字符串。

在启用这一功能并等待cloudfront发行版的部署之后,一切工作都很顺利。

 类似资料:
  • 我正在尝试使用aws-java-sdk(1.11.230)编写一个实用程序。我可以使用PutObjectRequest编写SSE-KMS文件,如下所示: 但是在尝试以多部分方式上传它时,我找不到任何方法来指定SSE-KMS的加密配置。 任何人都可以建议一种方法来成功完成这一任务吗。如有任何建议,我们将不胜感激。 维卡什·帕里克

  • 如何将文件直接上传到cloudfront发行版? 有没有和S3.putObject类似的直接上传到cloudfront的方法? 或者我应该继续发送到发行版的s3来源buketname.s3.amazonaws.com/?

  • 我正在尝试使用node.jsaws-sdk将大文件上传到s3存储桶。 方法以分段上传方式完整上传文件。 我想使用新的V3 aws-sdk。在新版本中上传大文件的方法是什么?方法似乎没有这样做。 我见过一些方法,例如,但我似乎找不到使用它们的完整工作示例。 先谢谢你。

  • 我正在使用最新的iOS SDK for AWS,并且使用TransferManager类从S3获取文件可以很好地工作 然后我想添加Cloudfront以更好地提供边缘服务,但将Cloudfront发行版设置为S3 bucket不起作用。 在这个问题上,这是一个公认的答案 谢谢你

  • 我正在尝试将文件(图像和视频)上传到AWS CloudFront发行版,该发行版指向s3 bucket。 目前,我可以使用HttpClient使用通过CloudFront SDK生成的签名URL获取和放置文件。 我最初尝试了一个POST,但这根本不起作用(30秒后超时),我从这个SO答案中发现,我需要添加来授予我的对象ACL访问权限,以便bucket所有者可以通过控制台进行访问。 我知道我可以使用

  • AWS是Amazon Web Services。 S3是他们的静态存储,可以配置为静态站点托管。 Cloudfront是他们的CDN(内容分发网络) 在AWS w / S3 + Cloudfront上托管静态页面的 Nuxt应用程序功能强大且价格低廉。 如果我们错过了一个步骤,请提交PR以更新此文档。 概览 我们将通过一些AWS服务托管超级便宜: S3 云数据"bucket"为我们的网站文件 可以