最终目标:将大型视频文件 (<200MB-3GB) 从内容制作者的计算机上传到 AWS S3 存储桶以使用 Elastic Transcoder 服务。
有任何想法吗?
最佳答案
您可以在几乎任何您可以编写的代码中实现前端以使用本地 S3 分段上传...这是我推荐的方法,因为它具有稳定性。
对于分段上传,“您”(我建议指的是开发人员,而不是最终用户)选择一个部分大小,每个部分至少 5MB,并且文件不能超过 10,000 个“部分”,每个“部分”大小完全相同(在上传开始时选择的那个“你”,除了最后一部分,不管最后剩下多少字节......所以上传文件的最终最大大小取决于部分大小你选。
“部分”的大小基本上变成了您的可重新启动/可重试的 block 大小(赢!)......因此您的前端实现可以无限地重新发送失败的部分,直到它正确通过。部分甚至不必按顺序上传,它们可以并行上传,如果您多次上传相同的部分,新的部分会替换旧的部分,并且对于每个 block ,S3 返回一个校验和,您可以比较到您本地计算的一个。在您完成上传之前,该对象不会在 S3 中可见。当您完成上传时,如果 S3 没有得到所有部分(这是应该的,因为它们在上传时都得到了确认),那么 finalize 调用将失败。
但是,您必须记住的一件事是,分段上传显然永远不会超时,如果客户端实用程序“从未”完成/完成或主动中止,您将支付上传的存储费用不完整上传的 block 。因此,您希望实现一个定期调用 ListMultipartUploads 的自动化后端进程。识别和中止那些无论出于何种原因从未完成或取消的上传,并中止它们。
我不知道这对您的整体问题有多大帮助,但是开发自定义前端工具应该不是一件复杂的事情——S3 API 非常简单。我可以这样说,因为我开发了一个实用程序来执行此操作(供我内部使用——这不是产品插件)。有一天我可能会将它作为开源发布,但它可能无论如何都不能满足您的需求——它本质上是一个命令行实用程序,可以被自动化/预定进程用于流式传输(“管道”)程序的输出直接进入 S3 作为一系列多部分部分(文件很大,所以我的默认部分大小为 64MB),当生成输出的程序关闭输入流时,它会检测到这一点并完成上传。 :) 我用它来流式传输实时数据库备份,通过压缩程序,在生成时直接进入 S3,而无需将这些海量文件存在于任何硬盘驱动器的任何位置。
在我看来,您希望为您的客户提供流畅体验的愿望高度赞扬了 S3 multipart 的作用,并且如果您知道如何编写任何可以生成桌面或基于浏览器的 UI 的代码,可以读取本地桌面文件系统,并且有用于 HTTP 和 SHA/HMAC 的库,那么您可以编写一个客户端来执行此操作,其外观和感觉完全符合您的需要。
您不需要在 AWS 中为每个客户端手动设置任何内容,只要您有一个后端系统可以向您验证客户端实用程序,可能通过通过 SSL 连接发送到客户端应用程序的用户名和密码Web 服务器,然后为客户端实用程序提供自动生成的临时 AWS 凭证,客户端实用程序可以使用该凭证进行上传。
关于amazon-web-services - 将大型高清视频文件上传到 Amazon Web Services S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430693/