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

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

曾珂
2023-03-14

我正在尝试将文件(图像和视频)上传到AWS CloudFront发行版,该发行版指向s3 bucket。

目前,我可以使用HttpClient使用通过CloudFront SDK生成的签名URL获取和放置文件。

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访问权限,以便bucket所有者可以通过控制台进行访问。

我知道我可以使用AWS S3 SDK上载到S3,并且可以启用传输加速功能,尽管AWS常见问题说明CloudFront在上载较小的文件或数据集(<1GB)时是一个更好的选择。

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

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

共有1个答案

齐承泽
2023-03-14

AWS支持建议响应,以防这对某人有帮助:

…三种可能的解决方案。第一种是,您可以通过一个到S3原点的签名URL将对象放入S3。第二个选项,通过S3预签名的URL将文件通过CF输入S3。第三个也是最有利的选项,使用传送加速endpoint将对象放入S3。

根据我的理解,FAQ说明使用CF而不是TAendpoint对于小于1 GB的文件更好,因为TA是针对较大的文件进行优化的。但是,有很多因素可以影响性能,我建议测试这两种方法,看看哪种服务最适合您的环境。

 类似资料:
  • 我正在尝试通过YouTube数据API v3将视频上传到多个频道。 当我将视频上传到主默认频道时,我可以正确地做到这一点,但是当我们尝试将它们上传到同一Youtube帐户的另一个频道时,却无法做到(因此OAuth2凭据应该是有效的)。 根据文档,在调用endpoint时,我必须将以下参数传递给API:onBehalfOfContentOwnerChannel和onBehalfOfContentOw

  • 我试图使用API接口将视频上传到S3存储桶,我遵循了预签名的URL过程,下面是我的lambda函数,它返回预签名的URL(它正确地返回了预签名的URL,看起来): 当我尝试上传一个像这样卷曲的mp4视频时,例如: curl-X PUT-F'data=@ch01_00000100055009702.mp4'https://redacted-bucket-instance.s3.amazonaws.c

  • 这是我当前通过CloudFront成功上传文件到S3的代码: 现在对于分块上传(或者AWS术语中的多部分),我不知道如何通过CloudFront(只有S3的文档)来完成它。 它发送了一个预飞行请求(OPTIONS),并返回,其中包含以下响应头: 但实际的POST请求返回并带有以下响应头:

  • 我在MVC Web应用程序中使用YouTubeAPI V3。目的是让我的Web用户使用MY OAuth凭据将视频上传到MYYouTube频道。在用户将他们的视频上传到我的Web服务器后,我需要在我的Web服务器和YouTube之间自动上传,无需我自己的用户干预。 我的(初稿)代码如下。我的问题是: > < li> 更新-已在下面解决。每当我试图删除一个视频,我得到一个“未经授权”的错误。当我检查令

  • 我在API网关中创建了一个API,用于将音频文件上载到s3,该文件作为多部分/表单数据从本地PC发送。 API集成请求如下所示 在URL路径参数中,添加bucket作为param,直接添加bucket名称 当我尝试上载文件时,收到错误响应, 需要做哪些更改?