AWS s3 "Put Object - copy"是否异步执行?



>假设我在 Amazon S3 中有一个巨大的文件(例如 1 GiB(。如果我调用put object - copy操作在另一个存储桶中创建副本,Amazon S3 是仅在实际副本完成后响应 HTTP 请求(保持我的 TCP 连接(,还是只响应"好的,您的对象将被复制"(释放我的 TCP 连接(?

我在操作描述中找不到答案。

操作的提案文件似乎提到了我的问题,但还不够清楚(实际上有点令人困惑(:

由于我们希望减少在长复制操作期间超时的可能性,因此对副本的响应与 Amazon S3 中的其他操作略有不同 — 一旦 Amazon S3 启动实际副本,它将以 200 响应响应。若要确定复制是否成功,请检查返回的正文中是否有 CopyObjectResult 正文,该正文将包含上载对象的上次修改日期和 ETag。如果复制失败,Amazon S3 可能会像现在一样响应非 200 错误。

返回的数据是 XML 文档。在 XML 声明之后,必须读取许多空格字符,之后将有一个 CopyObjectResult 元素或一个标准错误文档。发送给您的空格字符数将由 Amazon S3 执行复制操作所需的时间决定。

我在另一个 AWS 文档中找到了它,它可能会消除您的困惑:

当 Amazon S3 收到副本时,复制请求可能会返回错误 请求或在 Amazon S3 复制文件时。如果发生错误 在复制操作开始之前,您会收到一个标准的 Amazon S3 错误。如果在复制操作期间发生错误,则错误 响应嵌入在 200 OK 响应中。这意味着 200 OK 响应可以包含成功或错误。设计您的 用于解析响应内容并处理它的应用程序 适当地。 如果复制成功,您将收到一个响应,其中包含有关复制对象的信息。

AWS 放置对象 - 复制

虽然,它没有说明副本是异步的。通常,大文件的放置对象通常是多部分请求。

在 PHP SDK 中(不确定其他,但可能类似(,有不同的方法可以复制。

文档在这里。

1. 复制对象

这适用于同步,这意味着它将等到完成作业。

$client->copyObject($args)

$args是键值数组,详细信息在文档中。

2. 复制对象异步

这是异步工作的,这意味着服务器不会等待作业。

$client->copyObjectAsync($args)

在各种 API(Jave、.net、ruby 等(中都有一个CopyObjectAsync方法和一个 CopyObjectRequest 类,而且像往常一样,AWS 的文档搜索起来真的很糟糕。

最新更新