添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何使用C# HttpClient或AWS SDK通过CloudFront向S3上传视频

0 人关注

我试图将文件(图片和视频)上传到AWS CloudFront分布,它指向一个s3桶。

目前,我可以使用HttpClient通过CloudFront SDK生成的签名URL来GET和PUT文件。

using (HttpClient client = new HttpClient())
using (var stream = File.OpenRead(filepath))
using (HttpResponseMessage response = await client.PutAsync(url, new StreamContent(stream)))
    response.EnsureSuccessStatusCode();

我最初尝试了POST,但这根本不起作用(30秒后就超时了),我从这个SO答案中发现,我需要添加client.DefaultRequestHeaders.Add("x-amz-acl", "bucket-owner-full-control");来给我的对象ACL访问权限,这样桶主就可以通过控制台访问。

我知道我可以使用AWS S3 SDK上传到S3,我可以启用传输加速,尽管AWS FAQ指出,在上传较小的文件或数据集(<1GB)时,CloudFront是一个更好的选择。

我发现CloudFront的文档很模糊,除了CloudFront发行版的初始设置外,其他都是错误的,或者根本不存在。

上述方法是否是通过CloudFront将任何文件上传到S3的正确方法,还是有一个优化的、更强大的方法(例如,多部分上传,所以较大的文件可以恢复)--我想优化这个方法来上传视频,所以如果答案可以集中在这个方面,将不胜感激。

6 个评论
你为什么不直接上传到s3桶?
这是我们目前所做的,但对于在世界另一端的用户来说,有太多的延迟。使用CloudFront允许用户上传至边缘位置,然后通过AWS的内部网络传输到桶(类似于s3的加速传输--虽然我承认,我不确定为什么大的对象要通过TA,小的对象要通过CF--它们都使用边缘位置)。
有趣的是,我不知道CloudFront支持这个。
@RichardSzalay - 是的,自2013年以来 (aws.amazon.com/about-aws/whats-new/2013/10/15/...) --尽管至少可以说文档很稀少。
@Shoubs先生--你目前使用S3TA有什么原因吗?
@alexjs - 唯一的原因是,客户要求通过自定义域名而不是S3 URL上传。根据AWS的支持,目前S3TA端点还不能做到这一点。
c#
.net
amazon-web-services
amazon-s3
amazon-cloudfront
Mr Shoubs
Mr Shoubs
发布于 2016-12-09
1 个回答
Mr Shoubs
Mr Shoubs
发布于 2016-12-28
0 人赞同

AWS支持部门建议作出回应,以防对某人有所帮助。

... 三个可能的解决方案。第一种是,你可以通过一个签名的URL将对象PUT到 S3,通过一个签名的URL到S3原点。第二种方案,将 文件通过CF放到S3中,通过S3预签名的URL。第三种也是最 最有利的选择,使用传输加速端点把 对象到S3。

根据我的理解,常见问题指出,使用CF而不是TA 端点更适合小于1GB的文件,因为TA是为大文件优化的。 对较大的文件进行了优化。然而,有许多因素可以影响到 我建议测试这两种方法,看看哪种服务最适合你的环境。 对你的环境最有效。

他们还提到CF在做多部分上传时要复杂得多。

如果你需要使用CloudFront 签署的URL的其他原因。你将需要使用Multipart 上传API(InitiateMultipartUpload, UploadPart, CompleteMultipartUpload),并相应地签署它们。不幸的是,我们