AWS s3“放置对象-复制”是否异步执行?

时间:2019-09-16 17:08:00

标签: amazon-s3

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

我在operation description中找不到答案。

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

  

由于我们希望减轻长时间复制操作期间超时的可能性,因此对副本的响应与Amazon S3中的其他操作略有不同-Amazon S3一旦启动实际副本,它将以200响应进行响应。要确定复制是否成功,请检查返回的主体是否为CopyObjectResult主体,该主体将包含LastModified日期和上载对象的ETag。如果复制失败,则Amazon S3可能会像今天一样以非200错误响应。

     

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

3 个答案:

答案 0 :(得分:0)

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

  

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

AWS Put Object - Copy

尽管如此,它并没有说明复制是异步的。通常,大文件的放置对象通常是多部分请求。

答案 1 :(得分:0)

在PHP SDK中(不确定其他人,但可能是相似的),有不同的复制方法。

文档位于here中。

1。 CopyObject

这可以同步,这意味着它将等到完成作业。

$client->copyObject($args)

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

2。 CopyObjectAsync

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

$client->copyObjectAsync($args)

答案 2 :(得分:0)

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