

# PutObject（SOAP API）
<a name="SOAPPutObject"></a>

**注意**  
 Amazon S3 的 SOAP API 不适用于新客户，并将于 2025 年 8 月 31 日接近使用寿命终止（EOL）。我们建议您使用 REST API 或 Amazon SDK。

`PutObject` 操作将对象添加到存储桶。该对象的数据以 DIME 附件的形式附加。

为了确保对象在通过网络时不会损坏，您可以计算对象的 MD5，将其 PUT 到 Amazon S3，并将返回的 Etag 与计算的 MD5 值进行比较。

如果存储桶中已存在对象，则新对象将覆盖该对象，因为 Amazon S3 存储了上次写入请求。但是，Amazon S3 是一个分布式系统。如果 Amazon S3 几乎同时收到针对同一对象的多个写入请求，则可能会存储所有对象，尽管最终只有一个请求胜出。Amazon S3 不提供对象锁定；如果您需要此功能，请务必将其内置到您的应用程序层中。

**Example**  
此示例将一些数据和元数据放入“quotes”存储桶的“Nelson”对象中，授予用户（通常是拥有者）对该对象的 `FULL_CONTROL` 访问权限，并使匿名方可以读取该对象。在此示例中，未显示实际附件。  
`Sample Request`  

```
 1. <PutObject xmlns="https://doc.s3.amazonaws.com/2006-03-01">
 2.   <Bucket>quotes</Bucket>
 3.   <Key>Nelson</Key>
 4.   <Metadata>
 5.     <Name>Content-Type</Name>
 6.     <Value>text/plain</Value>
 7.   </Metadata>
 8.   <Metadata>
 9.     <Name>family</Name>
10.     <Value>Muntz</Value>
11.   </Metadata>
12.   <ContentLength>5</ContentLength>
13.   <AccessControlList>
14.     <Grant>
15.       <Grantee xsi:type="CanonicalUser">
16.         <ID>a9a7b886d6241bf9b1c61be666e9</ID>
17.         <DisplayName>chriscustomer</DisplayName>
18.       </Grantee>
19.       <Permission>FULL_CONTROL</Permission>
20.     </Grant>
21.     <Grant>
22.       <Grantee xsi:type="Group">
23.         <URI>http://acs.amazonaws.com/groups/global/AllUsers<URI>
24.       </Grantee>
25.       <Permission>READ</Permission>
26.     </Grant>
27.   </AccessControlList>
28.   <AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
29.   <Timestamp>2007-05-11T12:00:00.183Z</Timestamp>
30.   <Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
31. </PutObject>
```
`Sample Response`  

```
1. <PutObjectResponse xmlns="https://s3.amazonaws.com/doc/2006-03-01">
2.   <PutObjectResponse>
3.     <ETag>&quot;828ef3fdfa96f00ad9f27c383fc9ac7f&quot;</ETag>
4.     <LastModified>2006-03-01T12:00:00.183Z</LastModified>
5.   </PutObjectResponse>
6. </PutObjectResponse>
```

## 元素
<a name="SOAPPutObjectElements"></a>
+  `Bucket:` 要在其中添加对象的存储桶。
+ `Key:` 要分配给对象的键。
+ `Metadata:` 您可以在元数据元素中提供名称-值元数据对。这些将与对象一起存储。
+ `ContentLength:` 数据的长度，以字节为单位。
+ `AccessControlList:` 资源的访问控制列表。此元素是可选的。如果忽略，则向请求者授予对该对象的 `FULL_CONTROL` 访问权限。如果对象已存在，则将替换先前存在的访问控制策略。

## 响应
<a name="SOAPPutObjectResponse"></a>
+ `ETag:` 实体标签是对象的 MD5 哈希值，您可以使用它通过 `GetObjectExtended` 对于对象进行有条件提取。ETag 仅反映对于对象内容的更改，而不反映对其元数据的更改。
+ `LastModified:` 已保存对象的 Amazon S3 时间戳。

## 访问控制
<a name="SOAPPutObjectAccessControl"></a>

要将对象放入存储桶，您必须对存储桶拥有 `WRITE` 访问权限。

## 相关资源
<a name="SOAPPutObject_RelatedResources"></a>
+  [CopyObject（SOAP API）](SOAPCopyObject.md) 