Как получить URL объекта копирования aws-s3 в рельсах - PullRequest
0 голосов
/ 15 января 2019

Я хотел скопировать файл из одной папки в другую в том же контейнере, используя 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 для просмотра / доступа к скопированному объекту.Это сработало для меня.

1 Ответ

0 голосов
/ 15 января 2019

URL-адрес объекта - это просто URL-адрес корзины + имя файла, поэтому у вас уже есть нужная информация. Вы также можете создать публичный URL или предварительно подписанный URL , если вам нужно.

Также имейте в виду, что копирование объекта не копирует политику контроля доступа. Таким образом, у вас может не быть доступа, потому что вы не определили разрешения для нового объекта. https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#copy_from-instance_method

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...