通过分块上传大文件

uploading the large file through chunking

假设我们正在设计由 Amazon S3 支持的 Dropbox 的核心功能。 我对上传的工作方式有一些困惑(如下是我对上传工作流程的假设。如果下面的任何步骤有误,请纠正我)

  1. 用户在dropbox联系应用服务器说我有一个1GB的文件需要上传
  2. Dropbox 向用户提供预签名的 S3 URL,指示使用可恢复(分段)上传将文件直接上传到 S3。
  3. 所以现在 S3 已经将文件分成 10 个部分。

Q1。如果我到现在为止的理解是正确的,那么谁在 S3 上重新组装文件以创建 1GB 文件?

Q2。如果文件没有重新组合并保存在块中,S3 会通知 dropbox 这是块列表及其位置,以便 dropbox 可以将该信息存储在其元数据中 tables?

Q3。如果文件被重新组合,但我们想以块格式存储它,那么这是否意味着上传需要通过保管箱进行(使用一些上传服务,我们可以将块存储在 S3 中,并将元数据存储在我们的 table)?

注意:我看了很多这方面的资源,文件上传的系统图有点不一致。在某些地方,文件上传过程是通过位于我们的(保管箱)负载平衡器后面的块服务器执行的。

并且在某些地方文件直接上传到s3。

第一季度和第三季度

如果您将文件分块,并使用正常 PutObject API 上传它们,那么它们将保持分块状态。

如果您将文件分块,并使用分段上传顺序(CreateMultipartUploadUploadPart、然后是 CompleteMultipartUpload)上传它们,则 S3 将 re-assemble 文件.参考API reference.

Q2

因此,如果您使用分段上传序列,但由于未成功调用 CompleteMultipartUpload 而将其挂在那里,那么它们将一直挂在那里。不过你会被收费,所以你有责任跟踪这些。 S3不会通知你。

备注

图表与本例无关。