最近更新时间:2023-01-16 10:18:47
分块上传分三步: 1、初始化 2、上传分块 3、合并分块。
initiateMultipartUpload - 会启动一个分块上传任务并返回 upload ID。在一个确定的分块上传任务中,upload ID用于关联所有分块。
ks3.initiateMultipartUpload({
key: 'demo.txt', // 填写Object完整路径,必填
acl: '', // 访问控制,非必填
storageClass: '', // 存储类型,非必填
headers: {} // 非必填
}.then(res => {
console.log('initiateMultipartUpload res:', res); // res中会包含后续上传需要的UploadId
})
uploadPart - 将在分块上传任务中上传一个块。在你上传任一块之前你必须先要启动一个分块上传任务。在你发送一个启动请求后,KS3会给你一个唯一的 upload ID。每次上传块时,都需要upload ID包含在请求中。
ks3.uploadPart({
key: 'demo.txt', // 填写Object完整路径,必填
body: '<partFile>', // 分块数据,必填
partNumber: '<partNumber>', // 分块的序号,必填
uploadId: '<uploadId>' // 初始化分块上传时获取的上传id,必须
}.then(res => {
console.log('uploadPart res:', res); // 上传成功返回res.headers.etag,合并分块会用到
})
completeMultipart - 将完成对象装配之前的块上传任务 。用户启动一个分块上传任务后,会使用 Upload Parts上传所有的块。成功上传所有相关块之后,用户需要调用此接口来完成分块上传。收到完成请求后,KS3将会根据块序号将所有的块组装起来创建一个新的对象。
ks3.completeMultipart({
key: 'demo.txt', // 填写Object完整路径,必填
parts: [{
partNumber: sliceItem.partNumber,
etag: data.headers.etag
}], // 所有分块数据的集合,数组格式,必填
uploadId: '<uploadId>' // 上传的uploadId,必须
}.then(res => {
console.log('completeMultipart res:', res);
})
listParts - 将会列出指定上传任务中所有已上传的块。
ks3.listParts({
key: 'demo.txt', // 填写Object完整路径,必填
uploadId: '<uploadId>', // 初始化分块上传时获取的上传id,必须
}.then(res => {
console.log('listParts res:', res);
})
ListMultipartUploads - 查看bucket下的分块上传。
ks3.ListMultipartUploads({
bucket: '<bucket>', // bucket名称,非必须
prefix: '<prefix>', // 限定响应结果列表使用的前缀,正如你在电脑中使用的文件夹一样
'max-uploads': 100, //限定要列出正在进行任务的上限值([1,1000]),默认1000,非必须
}.then(res => {
console.log('ListMultipartUploads res:', res);
})
abortMultipartUpload - 将会放弃一个分块上传任务。当任务被放弃后,使用相应的upload ID则无法实现任何块的上传。存储中已经上传的块将会被释放。
ks3.abortMultipartUpload({
key: 'demo.txt', // 填写Object完整路径,必填
uploadId: '<uploadId>', // 初始化分块上传时获取的上传id,必须
}.then(res => {
console.log('abortMultipartUpload res:', res);
})
为便于用户上传,ks3-js-sdk将完整分块上传流程进行封装,可直接调用uploadMultiPart进行分块上传,uploadMultiPart已经包含初始化上传任务,自动将待上传的文件分块并上传,最后合并分块。
ks3.uploadMultiPart({
key: file.name, // 填写Object完整路径,必填
file: file, // 待上传的文件,必填
encryption: true, // 是否使用服务端加密,非必须,仅支持"AES256"加密
acl: 'private' //文件预设ACL(private | public-read),默认值private,非必须
}, function(res){
console.log('uploadMultiPart res :', res);
})
纯净模式