断点续传上传将要上传的文件分成若干个分片(Part)分别上传,所有分片都上传完成后,将所有分片合并成完整的文件,完成整个文件的上传。
说明
以下示例代码中的catch语法,请自行学习es6 promise、async/await。关于SDK的使用方式,请参见安装。
关于断点续传上传的更多信息,请参见断点续传上传。您还可以通过设置生命周期规则来定时清理不需要的Part。更多信息,请参见删除碎片。
分片上传提供progress参数方便用户传递进度回调,在回调中SDK将当前已经上传成功的比例和断点信息作为参数。为了实现断点上传,可以在上传过程中保存断点信息(checkpoint),发生错误后,再将已保存的checkpoint作为参数传递给multipartUpload,此时将从上次失败的地方继续上传。
示例代码
以下代码用于断点续传上传。
const OSS = require('ali-oss')
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填写Bucket名称。
bucket: 'examplebucket',
});
// yourfilepath填写已上传文件所在的本地路径。
const filePath = "yourfilepath";
let checkpoint;
async function resumeUpload() {
// 重试五次。
for (let i = 0; i < 5; i++) {
try {
const result = await client.multipartUpload('object-name', filePath, {
checkpoint,
async progress(percentage, cpt) {
checkpoint = cpt;
},
});
console.log(result);
break; // 跳出当前循环。
} catch (e) {
console.log(e);
}
}
}
resumeUpload();
上述示例代码将checkpoint保存在变量中,如果程序崩溃,则checkpoint信息会丢失。建议将checkpoint保存在文件中,在程序重启后则可以从文件中读取checkpoint信息。
相关文档
关于断点续传上传的完整示例代码,请参见GitHub示例。
文档内容是否对您有帮助?