将大型高清视频文件上传到Amazon Web Services S3

Ada*_*dam 6 upload amazon-s3 amazon-ec2 amazon-web-services amazon-elastic-transcoder

终极目标:将大型视频文件(<200MB-3GB)从内容制作者的计算机上传到AWS S3存储桶以使用Elastic Transcoder服务.

  • 内容制作人将是专业用户,因此他们的一些额外工作不是一个巨大的负担.但是,对他们(和我)来说尽可能简单是理想的.如果可以使用Web表单启动,那将是最好的.
  • 不会有数百个内容制作者,因此可以花费额外的时间或精力为每个单独的内容制作者设置某种帐户或流程.虽然自动化是王道.
  • 有人说你可以使用某种Java Applet或Silverlight.
  • 我想到的一件事是使用SFTP首先上传到EC2然后它将被移动到S3.但这听起来像是一种让它变得安全的痛苦.
  • 经过一些研究,我发现S3允许跨源资源共享.所以这可以允许直接上传到S3.但是,对于大文件来说这有多稳定?
  • 看起来S3也允许多部分上传.

有任何想法吗?

Mic*_*bot 5

您可以在几乎任何可以编码以表达本机 S3 分段上传的内容中实现前端...由于稳定性,这是我推荐的方法。

通过分段上传,“您”(我建议是指开发人员,而不是最终用户)选择一个部分大小,每个部分最小 5MB,并且文件不能大于 10,000 个“部分”,每个部分的大小完全相同(“您”在上传开始时选择的那个,除了最后一部分,最后一部分会剩下多少字节......所以上传文件的最终最大大小取决于部分大小你选。

“部分”的大小本质上成为您的可重新启动/可重试的块大小(胜利!)...因此您的前端实现可以无限地重新发送失败的部分,直到它正确通过。各个部分甚至不必按顺序上传,它们可以并行上传,如果您多次上传同一部分,则较新的部分将替换旧的部分,并且对于每个块,S3 都会返回一个您比较的校验和到您本地计算的一个。在您完成上传之前,该对象不会在 S3 中可见。当您完成上传时,如果 S3 尚未获得所有部分(这是应该的,因为它们在上传时全部被确认),那么 Finalize 调用将失败。

不过,您必须记住的一件事是,分段上传显然永远不会超时,如果它们“从未”最终确定/完成,也没有被客户端实用程序主动中止,您将支付上传的存储费用不完整上传的块。因此,您想要实现一个自动化后端进程,定期调用ListMultipartUploads来识别和中止那些出于某种原因从未完成或取消的上传,并中止它们。

我不知道这对于回答您的整体问题有多大帮助,但开发自定义前端工具不应该是一件复杂的事情——S3 API 非常简单。我可以这么说,因为我开发了一个实用程序来执行此操作(供我内部使用 - 这不是产品插件)。我可能有一天将它作为开源发布,但它可能无论如何都无法满足您的需求 - 它本质上是一个命令行实用程序,可以由自动/预定进程使用来流式传输(“管道”)程序的输出直接进入 S3 作为一系列多部分部分(文件很大,因此我的默认部分大小为 64MB),当生成输出的程序关闭输入流时,它会检测到这一点并完成上传。:) 我用它来流式传输实时数据库备份,通过压缩程序,在生成它们时直接将其传输到 S3,而无需将这些大量文件存在于任何硬盘驱动器上的任何位置。

在我看来,您希望为您的客户提供流畅体验的愿望高度赞扬 S3 multipart 的角色,并且如果您知道如何在可以生成桌面或基于浏览器的 UI 的任何内容中进行编码,可以读取本地桌面文件系统,并且具有 HTTP 和 SHA/HMAC 的库,那么您可以编写一个客户端来执行此操作,该客户端的外观和感觉完全符合您需要的方式。

您不需要在 AWS 中为每个客户端手动设置任何内容,只要您有一个可以向您验证客户端实用程序的后端系统(可能是通过通过 SSL 连接发送到应用程序上的用户名和密码) Web 服务器,然后向客户端实用程序提供自动生成的临时 AWS 凭证,客户端实用程序可使用该凭证进行上传。