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

如何通过CloudFront实现多部分上传?

魏烨熠
2023-03-14

这是我当前通过CloudFront成功上传文件到S3的代码:

let fileObject = thisUploader.getFile(id); //returns File API
let reader = new FileReader(); //using the FileReader API to read files
reader.onload = function () {                                      
	$.ajax({
		url: 'http://sampleId.cloudfront.net/video.mp4?Policy=examplePolicy&Signature=exampleSignature&Key-Pair-Id=exampleKey',
		type: 'PUT',
		contentType: fileObject.type,
		data: reader.result,
		processData: false,
		crossDomain: true
	});
}
reader.readAsArrayBuffer(fileObject);

现在对于分块上传(或者AWS术语中的多部分),我不知道如何通过CloudFront(只有S3的文档)来完成它。

$.ajax({
    url: 'http://sampleId.cloudfront.net/video.mp4'+'?uploads'+'&Policy=examplePolicy&Signature=exampleSignature&Key-Pair-Id=exampleKey',
    type: 'POST',
    contentType: 'application/json'
});

它发送了一个预飞行请求(OPTIONS),并返回200 OK,其中包含以下响应头:

Access-Control-Allow-Headers: content-type
Access-Control-Allow-Methods: GET, PUT, HEAD, POST
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3000
Connection: keep-alive
Content-Length: 0
Date: Thu, 02 Aug 2018 07:03:01 GMT
Server: AmazonS3
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Via: 1.1 7111a943ba8327e4a6723f271fc9f7c4.cloudfront.net (CloudFront)
X-Amz-Cf-Id: oeE4D7FM8TyxE7NtmVidbyADGLqvwOnc49XdI1ps-tHIUKXrdm2PGg==
X-Cache: Miss from cloudfront

但实际的POST请求返回403biabled并带有以下响应头:

Accept-Ranges: none
Access-Control-Allow-Methods: GET, PUT, HEAD, POST
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3000
Age: 13976
Connection: keep-alive
Content-Length: 445
Content-Type: text/html
Date: Thu, 02 Aug 2018 03:10:05 GMT
ETag: "07468170dde4c34c5990eee2d1c2ae1e"
Last-Modified: Wed, 01 Aug 2018 08:34:47 GMT
Server: AmazonS3
Via: 1.1 7111a943ba8327e4a6723f271fc9f7c4.cloudfront.net (CloudFront)
X-Amz-Cf-Id: EWPPWw0l9BTmhFFe39HWdUuCp2Ab2L3yE5bj9wEqFvl3mVbNmt28Pg==
x-amz-replication-status: FAILED
x-amz-version-id: yLhhgPevn2eeofp7kEmcvixP3iW.vj7S
X-Cache: Error from cloudfront

共有1个答案

谷梁向荣
2023-03-14

不幸的是Cloudfront不用于上传,您需要通过S3路径或预签名URL上传文件。

 类似资料:
  • 我试图使用cloudfront作为endpoint进行多部分上传,我知道这是可能的(https://Github.com/aws/aws-sdk-js/issues/423),我也在aws-sdk-js的Github上开了一张罚单,我不知道我是否缺少了一些配置选项,或者其他什么,但我不能使用aws sdk多部分上传函数在cloudfront上传,我总是在PUT请求上得到503个。 我使用以下代码启

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

  • 本文向大家介绍SpringBoot如何通过devtools实现热部署,包括了SpringBoot如何通过devtools实现热部署的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringBoot如何通过devtools实现热部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在项目的pom.xml文件添加如下两段 如果使用的是In

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

  • 我使用Spring引导上传文件。文件大小通常约为2GB,我们不能使用默认的Spring引导或,因为服务器具有有限的资源(磁盘空间)或用于缓冲的内存。所以我们想获取文件输入蒸汽并将文件直接存储到云存储中。 我知道spring boot有<code>多部分。已启用属性,因此我可以将其设置为false以跳过spring。但这会全局禁用多部分。是否有人知道是否有方法通过控制器/方法禁用多部分?

  • 问题内容: 我想从AngularJS到node.js服务器做一个简单的多部分表单发布,表单的一部分应包含JSON对象,另一部分应包含图像(我目前仅使用$ resource发布JSON对象) 我以为我应该从输入type =“ file”开始,但是后来发现AngularJS无法绑定到该文件。 我可以找到的所有示例都是用于包装jQuery插件以进行拖放的。我想要一个文件的简单上传。 我是AngularJ