Я пытаюсь использовать Aws :: S3 :: Client.upload_part_copy (Ruby SDK https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#upload_part_copy-instance_method) и испытываю некоторые трудности. Я должен использовать это из-за файла, который я копирую, размером более 5 ГБ. Я написал некоторый код, но получаю сообщение об ошибке «Отказано в доступе» (Aws :: S3 :: Errors :: AccessDenied) при выполнении многоэтапной загрузки. Я знаю, что учетные данные верны, и я могу использовать Aws :: S3 :: Client в противном случае. Ниже приведен тест для копирования файла с использованием multipart. Я делаю что-то неправильно? Есть ли какая-то другая аутентификация, которая требуется? Есть ли какие-то особые условия для перманента на моем ковше s3? Я знаю, что мне нужно собрать хеш частей и вызвать complete_multipart_upload, но я даже не могу зайти так далеко.
ТИА
t = $LargeFileKeyExisting
to = $NewLargeFileKey
size = 5880862890 # hardcoded for now size of large file in bytes
chunk = 104857600 # I Want to use 100 MB chunks
beg_byte = 1
part = 0
s3 = Aws::S3::Client.new(
access_key_id: $myKey,
secret_access_key: $mySecretKey,
region: $MyRegion
)
tt = s3.create_multipart_upload({bucket: $MyBucket, key: to})
loop do
part += 1
beg_byte = beg_byte
end_byte = beg_byte + chunk
end_byte = (end_byte > 5880862890) ? size : end_byte
puts "part beg: #{beg_byte} - end: #{end_byte} part#{part}"
resp = s3.upload_part_copy({
bucket: $MyBucket,
copy_source: t,
copy_source_range: "bytes=#{beg_byte}-#{end_byte}",
key: to,
part_number: part,
upload_id: tt[:upload_id],
})
break if end_byte == size
beg_byte = end_byte + 1
end