Bir nesneyi Object Storage Service (OSS) içine kesintisiz karşıya yükleme yöntemiyle yüklerken, karşıya yükleme ilerlemesini saklayan kontrol noktası dosyası için bir dizin belirtebilirsiniz. Ağ hatası veya program hatası nedeniyle bir nesnenin karşıya yüklenmesi başarısız olursa, karşıya yükleme işlemi kontrol noktası dosyasında kaydedilen konumdan devam eder.
Uygulama
Kesintisiz karşıya yükleme, bir dosyayı birden çok parçaya böler ve bunları ayrı ayrı yükler. Tüm parçalar yüklendikten sonra birleştirilerek eksiksiz dosya oluşturulur.
Kesintisiz karşıya yükleme yapmak için Bucket#resumable_upload yöntemini kullanabilirsiniz. Bu yöntem aşağıdaki parametreleri içerir:
|
Parametre |
Açıklama |
Gerekli |
Varsayılan değer |
|
key |
OSS'e karşıya yüklenecek dosyanın tam yolu. |
Evet |
Yok |
|
file |
Karşıya yüklenecek yerel dosyanın tam yolu. Not
Karşıya yükleme sırasında yerel dosyanın ETag değeri değişirse yükleme başarısız olur. |
Evet |
Yok |
|
:cpt_file |
Kırılma noktası bilgilerini kaydetmek için kullanılan dosya. Bu dosya üzerinde yazma iznine sahip olmanız gerekir. Not
|
Hayır |
Yerel dosya ile aynı dizindeki |
|
:disable_cpt |
Karşıya yükleme ilerlemesinin kaydedilip kaydedilmeyeceğini belirtir. Geçerli değerler:
|
Hayır |
false |
|
:part_size |
Her bir parçanın boyutu. |
Hayır |
4 MB |
|
&block |
Çağrı sırasında bir blok geçirilirse karşıya yükleme ilerlemesi bu blok tarafından işlenir. |
Hayır |
Yok |
Örnek kod
Aşağıdaki kod, kesintisiz karşıya yükleme yapmanıza ilişkin bir örnek sunar.
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}"
}