O upload retomável divide um arquivo em várias partes. Essas partes são enviadas separadamente e depois combinadas para formar o arquivo completo.
A sintaxe catch no código de exemplo a seguir baseia-se em ES6 Promise e async/await. Para obter mais informações sobre como usar o kit de desenvolvimento de software (SDK), consulte Instale o SDK do Node.js.
Para saber mais sobre uploads retomáveis, consulte Upload retomável. Você também pode definir regras de ciclo de vida para excluir periodicamente fragmentos indesejados. Para mais detalhes, veja Exclua fragmentos.
O recurso de upload multipartido oferece o parâmetro progress, que permite especificar um callback de progresso. Nesse callback, o SDK transmite a porcentagem de conclusão e as informações de ponto de interrupção como parâmetros. Para executar um upload retomável, salve as informações de checkpoint durante o envio. Caso ocorra um erro, passe o checkpoint salvo para a função multipartUpload. O upload será então retomado do ponto onde falhou.
Código de exemplo
O código a seguir demonstra como fazer um upload retomável.
const OSS = require('ali-oss')
const client = new OSS({
// Set region to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set region to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before running this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Specify the bucket name.
bucket: 'examplebucket',
});
// Set yourfilepath to the local path of the file to upload.
const filePath = "yourfilepath";
let checkpoint;
async function resumeUpload() {
// Retry five times.
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; // Break the current loop.
} catch (e) {
console.log(e);
}
}
}
resumeUpload();
O exemplo anterior salva o checkpoint em uma variável. Se o programa falhar, as informações de checkpoint serão perdidas. Para evitar isso, salve o checkpoint em um arquivo. Assim, o programa poderá ler as informações de checkpoint do arquivo após a reinicialização.
Referências
Para acessar o código de exemplo completo de upload retomável, consulte o exemplo no GitHub.