更新时间:2023-01-04 GMT+08:00

断点续传上传

功能说明

对分段上传的封装和加强,支持反馈上传进度、反馈上传事件、任务暂停和任务续传。

方法定义

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

可选

创建对象时可指定的预定义访问策略

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);
          }
    }
});