断点续传上传
功能说明
对分段上传的封装和加强,支持反馈上传进度、反馈上传事件、任务暂停和任务续传。
方法定义
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 | 可选 | 获取上传事件的回调函数。 说明:
|
| ResumeCallback | Function | 可选 | 获取断点续传控制参数的回调函数。 说明:
|
| ACL | String | 可选 | 创建对象时可指定的预定义访问策略。 |
| StorageClass | String | 可选 | 创建对象时可指定的对象的存储类型。 |
| Metadata | Object | 可选 | 对象的自定义元数据信息。 |
| WebsiteRedirectLocation | String | 可选 | 当桶设置了Website配置,该参数指明对象的重定向地址。 |
| Expires | Number | 可选 | 对象的生命周期,单位:天。 |
| ContentType | String | 可选 | 对象的MIME类型,常见的contentType(MIME)列表参见。 |
返回结果(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); } } });