
# 断点续传上传
#### 功能说明
对分段上传的封装和加强，支持反馈上传进度、反馈上传事件、任务暂停和任务续传。
#### 方法定义
```
ObsClient.uploadFile
```
#### 请求参数
| **字段名**                 | **类型**                                                                      | **约束**                  | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| Bucket                  | String                                                                      | 如未设置UploadCheckpoint则必选 | 桶名。                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Key                     | String                                                                      | 如未设置UploadCheckpoint则必选 | 对象名。                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| RequestDate             | String 或 Date | 可选                      | 指定请求时间。 说明： 当为String类型时，必须符合ISO8601或RFC822规范。                                                                                                                                                                                                                                                                                                                                                       |
| SourceFile              | File 或 Blob   | 如未设置UploadCheckpoint则必选 | 待上传的源文件（浏览器必须支持FileReader）。                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| UploadCheckpoint        | Object                                                                      | 可选                      | 断点续传记录对象，可通过ResumeCallback获取到。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| PartSize                | Number                                                                      | 可选                      | 分段大小，单位字节，取值范围是100KB\~5GB，默认为9MB。                                                                                                                                                                                                                                                                                                                                                                                                                             |
| TaskNum                 | Number                                                                      | 可选                      | 分段上传时的最大并发数，默认为1。                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ProgressCallback        | Function                                                                    | 可选                      | 获取上传进度的回调函数。 说明： 该回调函数依次包含三个参数：已上传的字节数、总字节数、已使用的时间（单位：秒）。                                                                                                                                                                                                                                                                                                                                            |
| EventCallback           | Function                                                                    | 可选                      | 获取上传事件的回调函数。 说明： - 该回调函数依次包含三个参数：事件类型，事件参数，事件结果；  - 事件类型可能的值：uploadPartSucceed、uploadPartFailed、uploadPartAborted、initiateMultipartUploadSucceed、initiateMultipartUploadFailed、completeMultipartUploadSucceed、completeMultipartUploadFailed、completeMultipartUploadAborted   |
| ResumeCallback          | Function                                                                    | 可选                      | 获取断点续传控制参数的回调函数。 说明： - 该回调函数依次包含两个参数：取消断点续传上传任务控制参数，断点续传记录对象；  - 可以调用取消断点续传上传任务控制参数的cancel方法来暂停断点续传上传任务；  - 断点续传记录对象中包含sourceFile字段代表待上传的文件，如果浏览器重启后该字段需要调用者重新进行设置。                                        |
| ACL                     | String                                                                      | 可选                      | 创建对象时可指定的[预定义访问策略](https://support.huaweicloud.com/api-obs_browserjs_sdk_api_zh/obs_34_0204.html)。                                                                                                                                                                                                                                                                                                                                                            |
| StorageClass            | String                                                                      | 可选                      | 创建对象时可指定的对象的[存储类型](https://support.huaweicloud.com/api-obs_browserjs_sdk_api_zh/obs_34_0205.html)。                                                                                                                                                                                                                                                                                                                                                            |
| Metadata                | Object                                                                      | 可选                      | 对象的自定义元数据信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| WebsiteRedirectLocation | String                                                                      | 可选                      | 当桶设置了Website配置，该参数指明对象的重定向地址。                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Expires                 | Number                                                                      | 可选                      | 对象的生命周期，单位：天。                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ContentType             | String                                                                      | 可选                      | 对象的MIME类型，常见的contentType（MIME）列表参见[配置、编辑、查看对象元数据](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。                                                                                                                                                                                                                                                                                                                                           |
| SseKms                  | String                                                                      | 可选                      | 以SSE-KMS方式加密对象，支持的值：kms                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| SseKmsKey               | String                                                                      | 可选                      | SSE-KMS方式下加密的主密钥ID，可为空。密钥ID获取方法请参见[查看密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。                                                                                                                                                                                                                                                                                                                                                    |
| SseC                    | String                                                                      | 可选                      | 以SSE-C方式加密对象，支持的值：AES256                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| SseCKey                 | String                                                                      | 可选                      | SSE-C方式下加密的密钥，该密钥需要您自定义，并由256bit的密钥经过base64编码得到。                                                                                                                                                                                                                                                                                                                                                                                                              |
   
#### 返回结果（InterfaceResult）
| **字段名**   | **类型** | **说明**                 |
|:---|:---|:---|
| RequestId | String | OBS服务端返回的请求ID。         |
| ETag      | String | 合并段后根据各个段的ETag值计算出的结果。 |
| Bucket    | String | 合并段所在的桶。               |
| Key       | String | 合并段后得到的对象名。            |
| Location  | String | 合并段后得到的对象的url。         |
| VersionId | String | 合并段后得到的对象版本号。          |
   
#### 代码样例
```
var cp;
var hook;
obsClient.uploadFile({
       Bucket : 'bucketname',
       Key : 'objectkey',
       SourceFile : document.getElementById('input-file').files[0],
       PartSize : 9 * 1024 * 1024,
       ProgressCallback : function(transferredAmount, totalAmount, totalSeconds){
           console.log(transferredAmount * 1.0 / totalSeconds / 1024);
           console.log(transferredAmount * 100.0 / totalAmount);
       },
       ResumeCallback : function(resumeHook, uploadCheckpoint){
           hook = resumeHook;
           cp = uploadCheckpoint;
       }
}, function(err, result){
    if(err){
        console.error('Error-->' + err);
    }else{
          if(result.CommonMsg.Status < 300){
                 console.log('RequestId-->' + result.InterfaceResult.RequestId);
                 console.log('Bucket-->' + result.InterfaceResult.Bucket);
                 console.log('Key-->' + result.InterfaceResult.Key);
                 console.log('Location-->' + result.InterfaceResult.Location);
          }else{
                 console.log('Code-->' + result.CommonMsg.Code);
                 console.log('Message-->' + result.CommonMsg.Message);
          }
    }
});
```
