
# 上传对象
#### 功能说明
上传单个对象到指定桶中。
#### 方法定义
```
1. ObsClient->putObject(array $parameter)
2. ObsClient->putObjectAsync(array $parameter, callable $callback)
```
#### 请求参数
| **字段名**                 | **类型**                                                                                                                                                                    | **约束** | **说明**                                                                                                                                                    |
|:---|:---|:---|:---|
| Bucket                  | string                                                                                                                                                                    | 必选     | 桶名。                                                                                                                                                       |
| Key                     | string                                                                                                                                                                    | 必选     | 对象名。                                                                                                                                                      |
| ACL                     | string                                                                                                                                                                    | 可选     | 创建对象时可指定的[预定义访问策略](https://support.huaweicloud.com/api-obs_php_sdk_api_zh/obs_38_0204.html)。                                                              |
| StorageClass            | string                                                                                                                                                                    | 可选     | 创建对象时可指定的对象的[存储类型](https://support.huaweicloud.com/api-obs_php_sdk_api_zh/obs_38_0205.html)。                                                              |
| Body                    | string 或 resource 或 GuzzleHttp\\Psr7\\StreamInterface | 可选     | 待上传对象的内容。                                                                                                                                                 |
| SourceFile              | string                                                                                                                                                                    | 可选     | 待上传对象的源文件路径。                                                                                                                                              |
| Metadata                | associative array                                                                                                                                                         | 可选     | 待上传对象的自定义元数据。                                                                                                                                             |
| WebsiteRedirectLocation | string                                                                                                                                                                    | 可选     | 当桶设置了Website配置，该参数指明对象的重定向地址。                                                                                                                             |
| ContentType             | string                                                                                                                                                                    | 可选     | 待上传对象的MIME类型，常见的contentType（MIME）列表参见[配置、编辑、查看对象元数据](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。                                    |
| ContentLength           | integer                                                                                                                                                                   | 可选     | 待上传对象数据的长度。                                                                                                                                               |
| ContentMD5              | string                                                                                                                                                                    | 可选     | 待上传对象数据的MD5值（经过Base64编码），提供给OBS服务端，校验数据完整性。                                                                                                               |
| SseKms                  | string                                                                                                                                                                    | 可选     | 以SSE-KMS方式加密对象，支持的值： - kms        |
| SseKmsKey               | string                                                                                                                                                                    | 可选     | SSE-KMS加密方式下使用的KMS主密钥的ID值，为空则默认配置为默认密钥。密钥ID获取方法请参见[查看密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。                                |
| SseC                    | string                                                                                                                                                                    | 可选     | 以SSE-C方式加密对象，支持的值： - AES256   |
| SseCKey                 | string                                                                                                                                                                    | 可选     | SSE-C方式下加密的密钥，该密钥需要您自定义，并由256bit的密钥经过base64编码得到。                                                                                                          |
   
![](https://support.huaweicloud.com/api-obs_php_sdk_api_zh/public_sys-resources/note_3.0-zh-cn.png)
- Body与SourceFile不能同时使用。
- 当Body与SourceFile都为空时，上传对象的大小为0字节。
 
#### 返回结果
| **字段名**        | **类型**  | **说明**                                                                                                                     |
|:---|:---|:---|
| HttpStatusCode | integer | HTTP状态码。                                                                                                                   |
| Reason         | string  | HTTP文本描述。                                                                                                                  |
| RequestId      | string  | OBS服务端返回的请求ID。                                                                                                             |
| ObjectURL      | string  | 对象的地址。                                                                                                                     |
| ETag           | string  | 对象的ETag值。                                                                                                                  |
| VersionId      | string  | 对象的版本号。                                                                                                                    |
| StorageClass   | string  | 对象的存储类型，当对象存储类型是标准存储时，该值为空。                                                                                                |
| SseKms         | string  | SSE-KMS方式的算法。                                                                                                              |
| SseKmsKey      | string  | SSE-KMS加密方式下使用的KMS主密钥的ID值，为空则默认配置为默认密钥。密钥ID获取方法请参见[查看密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。 |
| SseC           | string  | SSE-C方式的算法。                                                                                                                |
| SseCKeyMd5     | string  | SSE-C方式的密钥的MD5值。                                                                                                           |
   
#### 代码样例
```
try{
       $resp = $obsClient -> putObject([
              'Bucket' => 'bucketname',
              'Key' => 'objectkey',
              'Metadata' => ['meta1' => 'value1', 'meta2' => 'value2'],
//            'SourceFile' => 'localfile',
              'Body' => 'Hello OBS',
              'ContentType' => 'text/plain'
       ]);
       printf("RequestId:%s\n", $resp['RequestId']);
       printf("VersionId:%s\n", $resp['VersionId']);
       printf("StorageClass:%s\n", $resp['StorageClass']);
       printf("ETag:%s\n", $resp['ETag']);
}catch (Obs\Common\ObsException $obsException){
       printf("ExceptionCode:%s\n", $obsException->getExceptionCode());
       printf("ExceptionMessage:%s\n", $obsException->getExceptionMessage());
}
```
