Ao fazer o upload de um objeto para o Object Storage Service (OSS) usando o upload retomável, você pode especificar um diretório para o arquivo de checkpoint, que armazena o progresso do upload. Se o upload falhar devido a uma exceção de rede ou erro no programa, a tarefa será retomada a partir da posição registrada no arquivo de checkpoint.
Implementação
O upload retomável divide um arquivo em várias partes e faz o upload de cada uma separadamente. Após o upload de todas as partes, elas são mescladas para formar o arquivo completo.
Use o método Bucket#resumable_upload para executar um upload retomável. Este método inclui os seguintes parâmetros:
|
Parâmetro |
Descrição |
Obrigatório |
Valor padrão |
|
key |
O caminho completo do arquivo para upload no OSS. |
Sim |
Nenhum |
|
file |
O caminho completo do arquivo local para upload. Nota
Se o valor do ETag do arquivo local mudar durante o upload, o upload falhará. |
Sim |
Nenhum |
|
:cpt_file |
O arquivo que registra as informações do checkpoint. É necessária permissão de gravação para este arquivo. Nota
|
Não |
O arquivo |
|
:disable_cpt |
Define se o progresso do upload é registrado. Valores válidos:
|
Não |
false |
|
:part_size |
O tamanho de cada parte. |
Não |
4 MB |
|
&block |
Se um bloco for fornecido durante a chamada, o progresso do upload será gerenciado pelo bloco. |
Não |
Nenhum |
Código de exemplo
O código a seguir mostra como executar um upload retomável.
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# The endpoint of the China (Hangzhou) region is used as an example. Specify the actual endpoint.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Set the bucket name. For example, examplebucket.
bucket = client.get_bucket('examplebucket')
# Set key to the full path of the object. The full path cannot contain the bucket name. For example, exampledir/example.zip.
# Set file to the full path of the local file. For example, /tmp/example.zip.
bucket.resumable_upload('exampledir/example.zip', '/tmp/example.zip') do |p|
puts "Progress: #{p}"
end
bucket.resumable_upload(
'exampledir/example.zip', '/tmp/example.zip',
:part_size => 100 * 1024, :cpt_file => '/tmp/example.zip.cpt') { |p|
puts "Progress: #{p}"
}