Я хотел скопировать файл из одной папки в другую в том же контейнере, используя gem aws-sdk (версия 3).Мне удалось успешно скопировать файл.
Код выглядит следующим образом. Контроллер:
saved_file = path for the source file
source_bucket_name = 'bucket-name'
target_bucket_name = 'same as source bucket'
source_key = "#{saved_file.path.path}"
target_key = "path of the target"
s3 = Aws::S3::Client.new(credentials)
byebug
obj = s3.copy_object({bucket: target_bucket_name, copy_source: source_bucket_name + '/' + source_key, key: target_key})
ps: не беспокойтесь о source_key и path, так как я использовал для этого carrierwave,Как я могу получить путь / URL скопированного объекта.Мне нужен URL, потому что если я удаляю файл в исходной корзине после копирования, у получателя должна быть копия независимо.и к этому файлу можно получить доступ через URL.Это вывод obj в командной строке
, expiration = nil, copy_source_version_id = nil, version_id = nil, server_side_encryption = "AES256", sse_customer_algorithm = nil, sse_customer_key_md5 = nil, request_segedms, smskms
Любая помощь будет полезна, и TIA.
UPDATE:
aws_client = Aws::S3::Client.new('aws credentials')
s3 = Aws::S3::Client.new('aws credentials')
s3.copy_object({bucket: target_bucket_name, copy_source: source_bucket_name + '/'
+ source_key, key: target_key}, options = {acl: :public_read})
s3 = Aws::S3::Resource.new(client: aws_client)
bucket = s3.bucket('bucket-name')
obj = bucket.object("#{target_key}")
url = obj.presigned_url(:get)
использует этот URL для просмотра / доступа к скопированному объекту.Это сработало для меня.