HTML5和Amazon S3多部分上传

11
1个回答

11

是的,但如果您将其作为公共网站的一部分,则需要某种服务器后端来更安全地处理Amazon API密钥。

您可以在以下这些项目中找到看起来完整的示例实现:

请注意,我未曾使用、测试或审查过这些项目。

大致的步骤如下:

  1. 用户
    • 加载网页
    • 选择要上传的文件
    • 点击上传按钮
  2. 网页
    • 向服务器发送有关文件的信息
  3. 服务器
    • 使用Amazon API创建分段上传
    • 将"键"(文件名)和"上传ID"发送回网页
  4. 网页
    • 计算部分大小
    • 请求服务器签署部分,并传递"键"、"上传ID"、部分信息
  5. 服务器
    • 签署部分请求,发送"部分上传URL"、"日期"和"授权头"
  6. 网页
    • 使用"部分上传URL",通过"日期"和"授权头"直接将部分数据发送到Amazon S3
    • 跟踪部分ID
  7. 服务器和网页
    • 为每个附加部分重复步骤5和6,如有必要则恢复
  8. 网页
    • 向服务器发出"上传完成"请求(传递所有部分信息)
  9. 服务器
    • 向Amazon API发出请求,以完成文件的创建
  10. 网页
  11. 通知用户出现错误或成功

注:

  • 如果上传被中止,必须在服务端进行处理,否则已开始的部分/上传将占用S3存储桶中的空间。
  • 完成“上传完成”请求到亚马逊可能需要几分钟。

谢谢您提供详细的答案!我已经开始实施您之前详细介绍的协议,但还没有完成它:https://github.com/keichan34/s3uploader/tree/2.0-wip - sleepy_keita
1
太好了,我注意到你的项目中正在使用 Ruby,并找到另一个 Ruby 项目,我已将其添加到答案中供你参考。 - Dean Taylor
这是 PHP 的另一个示例 https://github.com/ienzam/s3-multipart-upload-browser。 - roundrobin
@BausTheBig 这是/曾经是答案中链接的第一个项目。显然不够清晰,感谢您的评论,我已更新答案以使链接更加清晰。 - Dean Taylor
非常感谢!答案非常详细,正是我现在所需要的。这是另一个有趣的项目(它使用Python):https://github.com/cinely/mule-uploader#mule-upload - roundrobin
1
@BausTheBig 实际上,该项目的大部分代码都是用Javascript编写的,只需要一个小型的服务器端点,可以轻松地使用任何语言编写。不过,“规范”的端点是用Python编写的(Flask)。 - Gabi Purcaru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接