Aws :: S3 :: Client.upload_part_copy ruby ​​sdk - PullRequest
       26

Aws :: S3 :: Client.upload_part_copy ruby ​​sdk

0 голосов
/ 01 сентября 2018

Я пытаюсь использовать 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
...