断点续传上传
功能说明
对分段上传的封装和加强,支持反馈上传进度、反馈上传事件、任务暂停和任务续传。
方法定义
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类型。 |
|
SseKms |
String |
可选 |
以SSE-KMS方式加密对象,支持的值:kms |
|
SseKmsKey |
String |
可选 |
SSE-KMS方式下加密的主密钥,可为空。 |
|
SseC |
String |
可选 |
以SSE-C方式加密对象,支持的值:AES256 |
|
SseCKey |
String |
可选 |
SSE-C方式下加密的密钥,由AES256算法得到。 |
返回结果(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);
}
}
});